From ed49cfcb1f4c13437b3162b76fbbdca5e0a46110 Mon Sep 17 00:00:00 2001 From: cifelse Date: Sat, 16 Mar 2024 15:44:26 +0800 Subject: [PATCH] Test GitHub Action --- .docs/demo.gif | Bin 0 -> 239292 bytes .editorconfig | 12 + .env.template | 3 - .eslintrc.json | 7 +- .github/workflows/publish.yml | 3 +- .github/workflows/setup-node/action.yml | 4 +- .github/workflows/test.yml | 16 + .gitignore | 133 +- .nvmrc | 1 + .prettierrc | 3 + README.md | 76 +- __tests__/compontents/board.test.tsx | 27 + __tests__/compontents/mobile-swiper.test.tsx | 49 + __tests__/compontents/score.test.tsx | 17 + __tests__/compontents/tile.test.tsx | 61 + __tests__/context/game-context.test.tsx | 82 + __tests__/hooks/use-previous-props.test.ts | 21 + __tests__/reducers/game-reducer.test.ts | 692 ++ app/favicon.ico | Bin 25931 -> 0 bytes app/globals.css | 33 - app/layout.tsx | 22 - app/page.tsx | 113 - components/board.tsx | 94 + components/mobile-swiper.tsx | 63 + components/score.tsx | 14 + components/tile.tsx | 45 + constants.ts | 15 + context/game-context.tsx | 89 + hooks/use-previous-props.ts | 11 + jest.config.js | 15 + jest.setup.js | 1 + models/tile.ts | 7 + next.config.js | 7 + next.config.mjs | 10 - package-lock.json | 8368 ++++++++++++------ package.json | 46 +- pages/_app.tsx | 11 + pages/_document.tsx | 13 + pages/index.tsx | 76 + postcss.config.js | 6 - public/apple-touch-icon.png | Bin 0 -> 6957 bytes public/favicon.ico | Bin 0 -> 4286 bytes public/favicon16.png | Bin 0 -> 587 bytes public/favicon32.png | Bin 0 -> 1004 bytes public/logo512.png | Bin 0 -> 20874 bytes public/next.svg | 1 - public/social-github.svg | 1 + public/social-twitter.svg | 1 + public/vercel.svg | 1 - reducers/game-reducer.ts | 293 + styles/board.module.css | 50 + styles/globals.css | 71 + styles/index.module.css | 62 + styles/score.module.css | 28 + styles/tile.module.css | 137 + tailwind.config.ts | 20 - tsconfig.json | 8 +- 57 files changed, 7772 insertions(+), 3167 deletions(-) create mode 100644 .docs/demo.gif create mode 100644 .editorconfig delete mode 100644 .env.template create mode 100644 .github/workflows/test.yml create mode 100644 .nvmrc create mode 100644 .prettierrc create mode 100644 __tests__/compontents/board.test.tsx create mode 100644 __tests__/compontents/mobile-swiper.test.tsx create mode 100644 __tests__/compontents/score.test.tsx create mode 100644 __tests__/compontents/tile.test.tsx create mode 100644 __tests__/context/game-context.test.tsx create mode 100644 __tests__/hooks/use-previous-props.test.ts create mode 100644 __tests__/reducers/game-reducer.test.ts delete mode 100644 app/favicon.ico delete mode 100644 app/globals.css delete mode 100644 app/layout.tsx delete mode 100644 app/page.tsx create mode 100644 components/board.tsx create mode 100644 components/mobile-swiper.tsx create mode 100644 components/score.tsx create mode 100644 components/tile.tsx create mode 100644 constants.ts create mode 100644 context/game-context.tsx create mode 100644 hooks/use-previous-props.ts create mode 100644 jest.config.js create mode 100644 jest.setup.js create mode 100644 models/tile.ts create mode 100644 next.config.js delete mode 100644 next.config.mjs create mode 100644 pages/_app.tsx create mode 100644 pages/_document.tsx create mode 100644 pages/index.tsx delete mode 100644 postcss.config.js create mode 100644 public/apple-touch-icon.png create mode 100644 public/favicon.ico create mode 100644 public/favicon16.png create mode 100644 public/favicon32.png create mode 100644 public/logo512.png delete mode 100644 public/next.svg create mode 100644 public/social-github.svg create mode 100644 public/social-twitter.svg delete mode 100644 public/vercel.svg create mode 100644 reducers/game-reducer.ts create mode 100644 styles/board.module.css create mode 100644 styles/globals.css create mode 100644 styles/index.module.css create mode 100644 styles/score.module.css create mode 100644 styles/tile.module.css delete mode 100644 tailwind.config.ts diff --git a/.docs/demo.gif b/.docs/demo.gif new file mode 100644 index 0000000000000000000000000000000000000000..af7362e5ef301decc8760abf0191ab08b2d2d880 GIT binary patch literal 239292 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 z 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

0W(%bEhPNhj)JuS{QRaZ zPB2bqx!(}sCe&+wLWzbsMB`?nDV1ox%LvXht<*AY>@zQfX4>UsIy7fGQZt=*GZ`Sof0I$7PFx~M z%r{`snuexEk=^c;Sa)=wTG7^y}a+hrq%f^3K+Lsb}DJ z%`1G{hhL=i)i7cS-=N1BlzZ@ou=$gnel^e*Tc_^<{wv)5k(S{la(#K6&e=0CRahgX zzkia>wY)O3^-Po z&ml$0JkNjZY9=}8ZTXKjp&#CrT7~bU{>QTF|2s?kV^;llv&3H=0uy-}Ny{p9)sEt5 zW;B2R9o!DRay7d5p#RJvFg>=9`l|YCh}-y(8W0jAW+BKLp`49PLedhlVa&cVaqNfP z7ZO235N;C|gDAAi;d{EN{(U?dou+;!?B@nB{WO3CS0~CuLg*6B5Z0+@t_E!?0t#Sy zo+vY3Z6hYosxknRDn1ReF|Wfb60cw&2LTOHR@Wnw?vOiD1b`3bx5c{0GCqnIxfjXU z?snMJGFbHmQ3*E&t6mF(XVo9D>LyQe+B5Q$p8?(90Q9=#5?lX*RWDI#?0xAM_9>6X zQF?&enVRXq^vBy*N$JryZd8;17PtF_Rj2>oSoQxFxZO1u*hk`bl`m02W__yTT}1tb z%;507Yb#?4Fk`YGz+8=T;+$=la?Jqv3U8dI14~yxdQ^2~#oCqg-Ko7Gf>55BlV@HB s@8D(r;CYgdwcx$O;pFY0`+PlY!$S_QIRc`p&1>dYoL4Kb0Kn=00BS8Dp8x;= literal 0 HcmV?d00001 diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..879b0d2 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,12 @@ +root = true + +[*] +charset = utf-8 +end_of_line = lf +insert_final_newline = true +trim_trailing_whitespace = true + +[*.{js,json,ts,tsx,html,svg,css}] +indent_size = 2 +indent_style = space +max_line_length = 80 diff --git a/.env.template b/.env.template deleted file mode 100644 index 2174232..0000000 --- a/.env.template +++ /dev/null @@ -1,3 +0,0 @@ -NEXT_PUBLIC_SUPABASE_URL = -NEXT_PUBLIC_SUPABASE_ANON_KEY = -SUPABASE_SERVICE_ROLE_KEY = \ No newline at end of file diff --git a/.eslintrc.json b/.eslintrc.json index 68f26c1..bffb357 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -1,6 +1,3 @@ { - "extends": "next/core-web-vitals", - "rules": { - "indent": ["error", 2] - } -} \ No newline at end of file + "extends": "next/core-web-vitals" +} diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index f653849..e31ad74 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -3,6 +3,7 @@ on: push: branches: - main + - release/0.2.x permissions: contents: read @@ -48,4 +49,4 @@ jobs: steps: - name: Publish to GitHub Pages 🚀 id: deployment - uses: actions/deploy-pages@v4 \ No newline at end of file + uses: actions/deploy-pages@v4 diff --git a/.github/workflows/setup-node/action.yml b/.github/workflows/setup-node/action.yml index 4e22018..e8f5b2f 100644 --- a/.github/workflows/setup-node/action.yml +++ b/.github/workflows/setup-node/action.yml @@ -6,7 +6,7 @@ runs: - name: Setup Node.js ⚙️ uses: actions/setup-node@v4 with: - node-version: 20 + node-version-file: ".nvmrc" - name: Cache dependencies ⚡ id: cache_dependencies @@ -18,4 +18,4 @@ runs: - name: Install dependencies 🔧 shell: bash if: steps.cache_dependencies.outputs.cache-hit != 'true' - run: npm ci \ No newline at end of file + run: npm ci diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 0000000..6668251 --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,16 @@ +name: test +on: push + +jobs: + test: + runs-on: ubuntu-latest + + steps: + - name: Checkout 🛎️ + uses: actions/checkout@v4 + + - name: Setup Node.js ⚙️ - Cache dependencies ⚡ - Install dependencies 🔧 + uses: ./.github/workflows/setup-node + + - name: Test 🧪 + run: npm run test-coverage diff --git a/.gitignore b/.gitignore index d6814a2..8f322f0 100644 --- a/.gitignore +++ b/.gitignore @@ -1,31 +1,21 @@ -# Firebase -.firebase -.firebaserc +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. -# Bun -bun.lockb - -# IDE files -/.vscode/* -/.idea/* - -# Dependencies +# dependencies /node_modules /.pnp .pnp.js -.yarn/install-state.gz -# Testing +# testing /coverage -# Next.js +# next.js /.next/ /out/ -# Production +# production /build -# Misc +# misc .DS_Store *.pem @@ -34,115 +24,12 @@ npm-debug.log* yarn-debug.log* yarn-error.log* -# Local env files -.env -.env.local +# local env files +.env*.local -# Vercel +# vercel .vercel -# TypeScript +# typescript *.tsbuildinfo next-env.d.ts - -# Logs -logs -*.log - -# Diagnostic reports -report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json - -# Runtime data -pids -*.pid -*.seed -*.pid.lock - -# Instrumented libs -lib-cov - -# Coverage data -coverage -*.lcov - -# nyc test coverage -.nyc_output - -# Grunt cache -.grunt - -# Bower components -bower_components - -# node-waf configuration -.lock-wscript - -# Compiled binary addons -build/Release - -# Snowpack dependency directory -web_modules/ - -# Optional npm cache -.npm - -# Optional eslint cache -.eslintcache - -# Optional stylelint cache -.stylelintcache - -# Microbundle cache -.rpt2_cache/ -.rts2_cache_cjs/ -.rts2_cache_es/ -.rts2_cache_umd/ - -# Optional REPL history -.node_repl_history - -# Output of `npm pack` -*.tgz - -# Yarn integrity file -.yarn-integrity - -# dotenv environment files -.env -.env.development.local -.env.test.local -.env.production.local - -# parcel-bundler cache -.cache -.parcel-cache - -# Serverless directories -.serverless/ - -# FuseBox cache -.fusebox/ - -# DynamoDB Local files -.dynamodb/ - -# TernJS port file -.tern-port - -# Stores VSCode versions used for testing VSCode extensions -.vscode-test - -# yarn v2 -.yarn/cache -.yarn/unplugged -.yarn/build-state.yml - -# Optional lerna debug log -lerna-debug.log* - -# Optional pnpm debug log -.pnpm-debug.log* - -# Misc -.DS_Store -DS_Store \ No newline at end of file diff --git a/.nvmrc b/.nvmrc new file mode 100644 index 0000000..d5a1596 --- /dev/null +++ b/.nvmrc @@ -0,0 +1 @@ +20.10.0 diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000..75fa134 --- /dev/null +++ b/.prettierrc @@ -0,0 +1,3 @@ +{ + "tabWidth": 2 +} diff --git a/README.md b/README.md index 84232ab..37fedd2 100644 --- a/README.md +++ b/README.md @@ -1,35 +1,41 @@ -# VerifEye -A verifiability tool for social media platforms that serves short-form video content. - -## Prerequisites -The following are the frameworks and tools that you must be familiar with to be able to contribute to this project: -1. [JavaScript](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference) and [TypeScript](https://www.typescriptlang.org/docs/handbook/intro.html) -2. [Node.js](https://nodejs.org/en/download/) or [Bun](https://bun.sh/) (we personally prefer Bun) -3. [Git](https://git-scm.com/downloads) -4. [React](https://react.dev/learn) -5. [Next.js](https://nextjs.org/learn) -6. [Tailwind CSS](https://tailwindcss.com/docs) -7. [Vercel](https://vercel.com/docs) -8. [Supabase](https://github.com/supabase/supabase) - -## Running Locally -1. Run the following in your terminal starting with cloning the repository: -```bash -git clone https://github.com/dlsucomet/verifeye.git -``` -2. Install dependencies: -```bash -npm install # or bun install -``` -3. Create a `.env.local` file with the contents of `.env.template` and fill in the keys. - -> [!IMPORTANT] -> The project will not run properly without the environment variables. Seek assistance from the project owner if you don't have the necessary values for the variables. - -4. Run the development server: -```bash -npm run dev # or bun dev -``` - -## Deployment -As of this moment, we are still deciding which platform to use for deployment. Regardless, we will create a pipeline that would automatically deploy the application to the chosen platform whenever a new commit is pushed to the main branch. \ No newline at end of file +# 2048-in-react + +[![Open issues][issues-badge]][issues-url] +[![CI][lint-badge]][lint-url] +[![CI][test-badge]][test-url] +[![TypeScript][typescript-badge]][typescript-url] + +[![](.docs/demo.gif)](https://mateuszsokola.github.io/2048-in-react/) + +## [Play 2048 💥](https://mateuszsokola.github.io/2048-in-react/) + +## Features + +- Fully-functional 2048 clone +- Animations +- Supports **keyboard**, **mouse** and **touch** events + +## Development + +_Easily set up a local development environment!_ + +Just start dev server on [localhost](http://localhost:3000): + +- clone +- `npm install` +- `npm run dev` + +**Start coding!** 🎉 + +## Build your own 2048 Game! 🚀 + +[![Build 2048 Game in React](https://assets.mateu.sh/assets/github-2048-in-react-readme)](https://assets.mateu.sh/r/github-2048-in-react-readme) + +[lint-badge]: https://github.com/mateuszsokola/2048-in-react/actions/workflows/lint.yml/badge.svg +[lint-url]: https://github.com/mateuszsokola/2048-in-react/actions/workflows/actions/workflows/lint.yml +[test-badge]: https://github.com/mateuszsokola/2048-in-react/actions/workflows/test.yml/badge.svg +[test-url]: https://github.com/mateuszsokola/2048-in-react/actions/workflows/test.yml +[issues-badge]: https://img.shields.io/github/issues/mateuszsokola/2048-in-react +[issues-url]: https://github.com/mateuszsokola/2048-in-react/issues +[typescript-badge]: https://badges.frapsoft.com/typescript/code/typescript.svg?v=101 +[typescript-url]: https://github.com/microsoft/TypeScript diff --git a/__tests__/compontents/board.test.tsx b/__tests__/compontents/board.test.tsx new file mode 100644 index 0000000..3b4d2eb --- /dev/null +++ b/__tests__/compontents/board.test.tsx @@ -0,0 +1,27 @@ +import { render } from "@testing-library/react"; +import Board from "@/components/board"; +import GameProvider from "@/context/game-context"; + +describe("Board", () => { + it("should render board with 16 cells", () => { + const { container } = render( + + + , + ); + const cellElements = container.querySelectorAll(".cell"); + + expect(cellElements.length).toEqual(16); + }); + + it("should render board with 2 tiles", async () => { + const { container } = render( + + + , + ); + const tiles = container.querySelectorAll(".tile"); + + expect(tiles.length).toEqual(2); + }); +}); diff --git a/__tests__/compontents/mobile-swiper.test.tsx b/__tests__/compontents/mobile-swiper.test.tsx new file mode 100644 index 0000000..903ca2b --- /dev/null +++ b/__tests__/compontents/mobile-swiper.test.tsx @@ -0,0 +1,49 @@ +import React from "react"; +import { render, fireEvent } from "@testing-library/react"; +import MobileSwiper, { SwipeInput } from "@/components/mobile-swiper"; + +describe("MobileSwiper", () => { + it("should trigger onSwipe with correct input on touch end", () => { + const onSwipeMock = jest.fn(); + const { container } = render( + +

+ , + ); + + const swipeTarget = container.querySelector( + "[data-testid='swipe-target']", + ) as HTMLElement; + + fireEvent.touchStart(swipeTarget, { + touches: [{ clientX: 0, clientY: 0 }], + }); + fireEvent.touchEnd(swipeTarget, { + changedTouches: [{ clientX: 50, clientY: 0 }], + }); + + expect(onSwipeMock).toHaveBeenCalledWith({ deltaX: 50, deltaY: 0 }); + }); + + it("should not trigger onSwipe if touch is outside the component", () => { + const onSwipeMock = jest.fn(); + const { container } = render( + +
Swipe me!
+
, + ); + + const swipeTarget = container.querySelector( + "[data-testid='swipe-target']", + ) as HTMLElement; + + fireEvent.touchStart(swipeTarget, { + touches: [{ clientX: 0, clientY: 0 }], + }); + fireEvent.touchEnd(document.body, { + changedTouches: [{ clientX: 50, clientY: 0 }], + }); + + expect(onSwipeMock).not.toHaveBeenCalled(); + }); +}); diff --git a/__tests__/compontents/score.test.tsx b/__tests__/compontents/score.test.tsx new file mode 100644 index 0000000..e7f661d --- /dev/null +++ b/__tests__/compontents/score.test.tsx @@ -0,0 +1,17 @@ +import { render } from "@testing-library/react"; +import GameProvider from "@/context/game-context"; +import Board from "@/components/board"; +import Score from "@/components/score"; + +describe("Score", () => { + it("should display score", () => { + const { container } = render( + + + + , + ); + + expect(container.querySelector(".score > div")?.textContent).toEqual("0"); + }); +}); diff --git a/__tests__/compontents/tile.test.tsx b/__tests__/compontents/tile.test.tsx new file mode 100644 index 0000000..d2b966b --- /dev/null +++ b/__tests__/compontents/tile.test.tsx @@ -0,0 +1,61 @@ +import { render, waitFor } from "@testing-library/react"; +import Tile from "@/components/tile"; + +describe("Tile", () => { + beforeEach(() => { + jest.useFakeTimers(); + }); + + it("should render with correct position and value", () => { + // Arrange + const position: [number, number] = [1, 2]; + const value = 2048; + + // Act + const { container } = render(); + + const tile: HTMLDivElement = container.firstChild as HTMLDivElement; + expect(tile.textContent).toEqual("2048"); + expect(tile.className).toEqual("tile tile2048"); + expect(tile).toHaveStyle({ + left: `72px`, + top: `144px`, + zIndex: `2048`, + }); + }); + + it("should apply animation when value changes", async () => { + // Arrange + const position: [number, number] = [0, 0]; + const initialValue = 2; + const updatedValue = 4; + + // Act + const { getByText, rerender } = render( + , + ); + + // Assert initial state + const tileElement = getByText(`${initialValue}`); + expect(tileElement).toBeInTheDocument(); + + await waitFor(() => { + expect(tileElement).toHaveStyle({ + transform: "scale(1)", + }); + }); + rerender(); + + await waitFor(() => { + expect(tileElement).toHaveStyle({ + transform: "scale(1.1)", + }); + }); + + await waitFor(() => { + expect(tileElement).toHaveStyle({ + transform: "scale(1)", + }); + }); + }); +}); diff --git a/__tests__/context/game-context.test.tsx b/__tests__/context/game-context.test.tsx new file mode 100644 index 0000000..7305f3c --- /dev/null +++ b/__tests__/context/game-context.test.tsx @@ -0,0 +1,82 @@ +import { fireEvent, render } from "@testing-library/react"; +import GameProvider from "@/context/game-context"; +import Board from "@/components/board"; +import Score from "@/components/score"; + +describe("GameProvider", () => { + describe("startGame", () => { + it("should start the game with two tiles", () => { + const { container } = render( + + + , + ); + + expect(container.querySelectorAll(".tile")).toHaveLength(2); + }); + }); + + describe("getTiles", () => { + it("should return tiles", () => { + const { container } = render( + + + , + ); + + expect(container.querySelectorAll(".tile")).toHaveLength(2); + }); + }); + + describe("moveTiles", () => { + it("should move tiles and merge them together", () => { + const { container } = render( + + + , + ); + + expect(container.querySelectorAll(".tile4")).toHaveLength(0); + expect(container.querySelectorAll(".tile2")).toHaveLength(2); + + fireEvent.keyDown(container, { + key: "ArrowUp", + code: "ArrowUp", + }); + + expect(container.querySelectorAll(".tile4")).toHaveLength(1); + expect(container.querySelectorAll(".tile2")).toHaveLength(1); + }); + }); + + describe("score", () => { + it("should return score", () => { + const { container } = render( + + + + , + ); + + expect(container.querySelector(".score > div")?.textContent).toEqual("0"); + }); + + it("should refresh score after move", () => { + const { container } = render( + + + + , + ); + + expect(container.querySelector(".score > div")?.textContent).toEqual("0"); + + fireEvent.keyDown(container, { + key: "ArrowUp", + code: "ArrowUp", + }); + + expect(container.querySelector(".score > div")?.textContent).toEqual("4"); + }); + }); +}); diff --git a/__tests__/hooks/use-previous-props.test.ts b/__tests__/hooks/use-previous-props.test.ts new file mode 100644 index 0000000..69cb300 --- /dev/null +++ b/__tests__/hooks/use-previous-props.test.ts @@ -0,0 +1,21 @@ +import { renderHook } from "@testing-library/react"; +import usePreviousProps from "@/hooks/use-previous-props"; + +describe("usePreviousProps", () => { + it("should return undefined for the first render", () => { + const { result } = renderHook(() => usePreviousProps("initial value")); + + expect(result.current).toBeUndefined(); + }); + + it("should return the previous value of the prop", () => { + const { result, rerender } = renderHook( + ({ value }) => usePreviousProps(value), + { initialProps: { value: "initial value" } }, + ); + + rerender({ value: "updated value" }); + + expect(result.current).toEqual("initial value"); + }); +}); diff --git a/__tests__/reducers/game-reducer.test.ts b/__tests__/reducers/game-reducer.test.ts new file mode 100644 index 0000000..e06665e --- /dev/null +++ b/__tests__/reducers/game-reducer.test.ts @@ -0,0 +1,692 @@ +import { Tile } from "@/models/tile"; +import gameReducer, { initialState } from "@/reducers/game-reducer"; +import { act, renderHook } from "@testing-library/react"; +import { isNil } from "lodash"; +import { useReducer } from "react"; + +describe("gameReducer", () => { + describe("clean_up", () => { + it("should clean up unused tiles after two tiles get merged together", () => { + const tile1: Tile = { + position: [0, 1], + value: 2, + }; + const tile2: Tile = { + position: [0, 3], + value: 2, + }; + + const { result } = renderHook(() => + useReducer(gameReducer, initialState), + ); + const [, dispatch] = result.current; + + act(() => { + dispatch({ type: "create_tile", tile: tile1 }); + dispatch({ type: "create_tile", tile: tile2 }); + dispatch({ type: "move_up" }); + }); + + const [stateBefore] = result.current; + expect(Object.values(stateBefore.tiles)).toHaveLength(2); + expect(stateBefore.tilesByIds).toHaveLength(2); + + act(() => dispatch({ type: "clean_up" })); + + const [stateAfter] = result.current; + expect(Object.values(stateAfter.tiles)).toHaveLength(1); + expect(stateAfter.tilesByIds).toHaveLength(1); + }); + }); + describe("create_tile", () => { + it("should create a new tile", () => { + const tile: Tile = { + position: [0, 0], + value: 2, + }; + + const { result } = renderHook(() => + useReducer(gameReducer, initialState), + ); + const [, dispatch] = result.current; + + act(() => dispatch({ type: "create_tile", tile })); + + const [state] = result.current; + + const tileId = state.board[0][0]; + expect(tileId).toBeDefined(); + expect(Object.values(state.tiles)).toEqual([{ id: tileId, ...tile }]); + expect(state.tilesByIds).toEqual([tileId]); + }); + + it("should append tile id to the tile model", () => { + const tile: Tile = { + position: [0, 0], + value: 2, + }; + + const { result } = renderHook(() => + useReducer(gameReducer, initialState), + ); + const [, dispatch] = result.current; + + act(() => dispatch({ type: "create_tile", tile })); + + const [state] = result.current; + + const tileId = state.board[0][0]; + expect(state.tiles[tileId].id).toBeDefined(); + }); + }); + + describe("move_up", () => { + it("should move tiles to the top of the board", () => { + const tile1: Tile = { + position: [0, 1], + value: 2, + }; + const tile2: Tile = { + position: [1, 3], + value: 2, + }; + + const { result } = renderHook(() => + useReducer(gameReducer, initialState), + ); + const [, dispatch] = result.current; + + act(() => { + dispatch({ type: "create_tile", tile: tile1 }); + dispatch({ type: "create_tile", tile: tile2 }); + }); + + const [stateBefore] = result.current; + expect(isNil(stateBefore.board[0][0])).toBeTruthy(); + expect(isNil(stateBefore.board[0][1])).toBeTruthy(); + expect(typeof stateBefore.board[1][0]).toBe("string"); + expect(typeof stateBefore.board[3][1]).toBe("string"); + + expect(stateBefore.hasChanged).toBeFalsy(); + + act(() => dispatch({ type: "move_up" })); + + const [stateAfter] = result.current; + expect(typeof stateAfter.board[0][0]).toBe("string"); + expect(typeof stateAfter.board[0][1]).toBe("string"); + expect(isNil(stateAfter.board[1][0])).toBeTruthy(); + expect(isNil(stateAfter.board[3][1])).toBeTruthy(); + + expect(stateAfter.hasChanged).toBeTruthy(); + }); + + it("should stack tiles with the same values on top of each other", () => { + const tile1: Tile = { + position: [0, 1], + value: 2, + }; + const tile2: Tile = { + position: [0, 3], + value: 2, + }; + + const { result } = renderHook(() => + useReducer(gameReducer, initialState), + ); + const [, dispatch] = result.current; + + act(() => { + dispatch({ type: "create_tile", tile: tile1 }); + dispatch({ type: "create_tile", tile: tile2 }); + }); + + const [stateBefore] = result.current; + expect(isNil(stateBefore.board[0][0])).toBeTruthy(); + expect(typeof stateBefore.board[1][0]).toBe("string"); + expect(isNil(stateBefore.board[2][0])).toBeTruthy(); + expect(typeof stateBefore.board[3][0]).toBe("string"); + + act(() => dispatch({ type: "move_up" })); + + const [stateAfter] = result.current; + expect(typeof stateAfter.board[0][0]).toBe("string"); + expect(isNil(stateAfter.board[1][0])).toBeTruthy(); + expect(isNil(stateAfter.board[2][0])).toBeTruthy(); + expect(isNil(stateAfter.board[3][0])).toBeTruthy(); + }); + + it("should merge tiles with the same values", () => { + const tile1: Tile = { + position: [0, 1], + value: 2, + }; + const tile2: Tile = { + position: [0, 3], + value: 2, + }; + + const { result } = renderHook(() => + useReducer(gameReducer, initialState), + ); + const [, dispatch] = result.current; + + act(() => { + dispatch({ type: "create_tile", tile: tile1 }); + dispatch({ type: "create_tile", tile: tile2 }); + }); + + const [stateBefore] = result.current; + expect(isNil(stateBefore.board[0][0])).toBeTruthy(); + expect(stateBefore.tiles[stateBefore.board[1][0]].value).toBe(2); + expect(isNil(stateBefore.board[2][0])).toBeTruthy(); + expect(stateBefore.tiles[stateBefore.board[3][0]].value).toBe(2); + expect(stateBefore.hasChanged).toBeFalsy(); + + act(() => dispatch({ type: "move_up" })); + + const [stateAfter] = result.current; + expect(stateAfter.tiles[stateAfter.board[0][0]].value).toBe(4); + expect(isNil(stateAfter.board[1][0])).toBeTruthy(); + expect(isNil(stateAfter.board[2][0])).toBeTruthy(); + expect(isNil(stateAfter.board[3][0])).toBeTruthy(); + expect(stateAfter.hasChanged).toBeTruthy(); + }); + + it("should keep hasChanged falsy if no tile changed position or value", () => { + const tile1: Tile = { + position: [0, 0], + value: 4, + }; + const tile2: Tile = { + position: [0, 1], + value: 2, + }; + + const { result } = renderHook(() => + useReducer(gameReducer, initialState), + ); + const [, dispatch] = result.current; + + act(() => { + dispatch({ type: "create_tile", tile: tile1 }); + dispatch({ type: "create_tile", tile: tile2 }); + dispatch({ type: "move_up" }); + }); + + const [stateAfter] = result.current; + expect(stateAfter.hasChanged).toBeFalsy(); + }); + }); + + describe("move_down", () => { + it("should move tiles to the bottom of the board", () => { + const tile1: Tile = { + position: [0, 1], + value: 2, + }; + const tile2: Tile = { + position: [1, 3], + value: 2, + }; + + const { result } = renderHook(() => + useReducer(gameReducer, initialState), + ); + const [, dispatch] = result.current; + + act(() => { + dispatch({ type: "create_tile", tile: tile1 }); + dispatch({ type: "create_tile", tile: tile2 }); + }); + + const [stateBefore] = result.current; + expect(isNil(stateBefore.board[3][0])).toBeTruthy(); + expect(typeof stateBefore.board[1][0]).toBe("string"); + expect(typeof stateBefore.board[3][1]).toBe("string"); + expect(stateBefore.hasChanged).toBeFalsy(); + + act(() => dispatch({ type: "move_down" })); + + const [stateAfter] = result.current; + expect(typeof stateAfter.board[3][0]).toBe("string"); + expect(typeof stateAfter.board[3][1]).toBe("string"); + expect(isNil(stateAfter.board[1][0])).toBeTruthy(); + expect(stateAfter.hasChanged).toBeTruthy(); + }); + + it("should stack tiles with the same values on top of each other", () => { + const tile1: Tile = { + position: [0, 1], + value: 2, + }; + const tile2: Tile = { + position: [0, 3], + value: 2, + }; + + const { result } = renderHook(() => + useReducer(gameReducer, initialState), + ); + const [, dispatch] = result.current; + + act(() => { + dispatch({ type: "create_tile", tile: tile1 }); + dispatch({ type: "create_tile", tile: tile2 }); + }); + + const [stateBefore] = result.current; + expect(isNil(stateBefore.board[0][0])).toBeTruthy(); + expect(typeof stateBefore.board[1][0]).toBe("string"); + expect(isNil(stateBefore.board[2][0])).toBeTruthy(); + expect(typeof stateBefore.board[3][0]).toBe("string"); + + act(() => dispatch({ type: "move_down" })); + + const [stateAfter] = result.current; + expect(isNil(stateAfter.board[0][0])).toBeTruthy(); + expect(isNil(stateAfter.board[1][0])).toBeTruthy(); + expect(isNil(stateAfter.board[2][0])).toBeTruthy(); + expect(typeof stateAfter.board[3][0]).toBe("string"); + }); + + it("should merge tiles with the same values", () => { + const tile1: Tile = { + position: [0, 1], + value: 2, + }; + const tile2: Tile = { + position: [0, 3], + value: 2, + }; + + const { result } = renderHook(() => + useReducer(gameReducer, initialState), + ); + const [, dispatch] = result.current; + + act(() => { + dispatch({ type: "create_tile", tile: tile1 }); + dispatch({ type: "create_tile", tile: tile2 }); + }); + + const [stateBefore] = result.current; + expect(isNil(stateBefore.board[0][0])).toBeTruthy(); + expect(stateBefore.tiles[stateBefore.board[1][0]].value).toBe(2); + expect(isNil(stateBefore.board[2][0])).toBeTruthy(); + expect(stateBefore.tiles[stateBefore.board[3][0]].value).toBe(2); + expect(stateBefore.hasChanged).toBeFalsy(); + + act(() => dispatch({ type: "move_down" })); + + const [stateAfter] = result.current; + expect(isNil(stateAfter.board[0][0])).toBeTruthy(); + expect(isNil(stateAfter.board[1][0])).toBeTruthy(); + expect(isNil(stateAfter.board[2][0])).toBeTruthy(); + expect(stateAfter.tiles[stateAfter.board[3][0]].value).toBe(4); + expect(stateAfter.hasChanged).toBeTruthy(); + }); + + it("should keep hasChanged falsy if no tile changed position or value", () => { + const tile1: Tile = { + position: [0, 3], + value: 2, + }; + const tile2: Tile = { + position: [1, 3], + value: 2, + }; + + const { result } = renderHook(() => + useReducer(gameReducer, initialState), + ); + const [, dispatch] = result.current; + + act(() => { + dispatch({ type: "create_tile", tile: tile1 }); + dispatch({ type: "create_tile", tile: tile2 }); + dispatch({ type: "move_down" }); + }); + + expect(result.current[0].hasChanged).toBeFalsy(); + }); + + it("should keep the original order of tiles (regression test)", () => { + const tile1: Tile = { + position: [0, 1], + value: 4, + }; + const tile2: Tile = { + position: [0, 3], + value: 2, + }; + + const { result } = renderHook(() => + useReducer(gameReducer, initialState), + ); + const [, dispatch] = result.current; + + act(() => { + dispatch({ type: "create_tile", tile: tile1 }); + dispatch({ type: "create_tile", tile: tile2 }); + }); + + const [stateBefore] = result.current; + expect(isNil(stateBefore.board[0][0])).toBeTruthy(); + expect(stateBefore.tiles[stateBefore.board[1][0]].value).toBe(4); + expect(isNil(stateBefore.board[2][0])).toBeTruthy(); + expect(stateBefore.tiles[stateBefore.board[3][0]].value).toBe(2); + + act(() => dispatch({ type: "move_down" })); + + const [stateAfter] = result.current; + expect(isNil(stateAfter.board[0][0])).toBeTruthy(); + expect(isNil(stateAfter.board[1][0])).toBeTruthy(); + expect(stateAfter.tiles[stateAfter.board[2][0]].value).toBe(4); + expect(stateAfter.tiles[stateAfter.board[3][0]].value).toBe(2); + }); + }); + + describe("move_left", () => { + it("should move tiles to the left side of the board", () => { + const tile1: Tile = { + position: [0, 1], + value: 2, + }; + const tile2: Tile = { + position: [1, 3], + value: 2, + }; + + const { result } = renderHook(() => + useReducer(gameReducer, initialState), + ); + const [, dispatch] = result.current; + + act(() => { + dispatch({ type: "create_tile", tile: tile1 }); + dispatch({ type: "create_tile", tile: tile2 }); + }); + + const [stateBefore] = result.current; + expect(isNil(stateBefore.board[3][0])).toBeTruthy(); + expect(typeof stateBefore.board[1][0]).toBe("string"); + expect(typeof stateBefore.board[3][1]).toBe("string"); + expect(stateBefore.hasChanged).toBeFalsy(); + + act(() => dispatch({ type: "move_left" })); + + const [stateAfter] = result.current; + expect(typeof stateAfter.board[1][0]).toBe("string"); + expect(typeof stateAfter.board[3][0]).toBe("string"); + expect(isNil(stateAfter.board[3][1])).toBeTruthy(); + expect(stateAfter.hasChanged).toBeTruthy(); + }); + + it("should stack tiles with the same values on top of each other", () => { + const tile1: Tile = { + position: [0, 1], + value: 2, + }; + const tile2: Tile = { + position: [3, 1], + value: 2, + }; + + const { result } = renderHook(() => + useReducer(gameReducer, initialState), + ); + const [, dispatch] = result.current; + + act(() => { + dispatch({ type: "create_tile", tile: tile1 }); + dispatch({ type: "create_tile", tile: tile2 }); + }); + + const [stateBefore] = result.current; + expect(typeof stateBefore.board[1][0]).toBe("string"); + expect(isNil(stateBefore.board[1][1])).toBeTruthy(); + expect(isNil(stateBefore.board[1][2])).toBeTruthy(); + expect(typeof stateBefore.board[1][3]).toBe("string"); + + act(() => dispatch({ type: "move_left" })); + + const [stateAfter] = result.current; + expect(typeof stateAfter.board[1][0]).toBe("string"); + expect(isNil(stateAfter.board[1][1])).toBeTruthy(); + expect(isNil(stateAfter.board[1][2])).toBeTruthy(); + expect(isNil(stateAfter.board[1][3])).toBeTruthy(); + }); + + it("should merge tiles with the same values", () => { + const tile1: Tile = { + position: [0, 1], + value: 2, + }; + const tile2: Tile = { + position: [3, 1], + value: 2, + }; + + const { result } = renderHook(() => + useReducer(gameReducer, initialState), + ); + const [, dispatch] = result.current; + + act(() => { + dispatch({ type: "create_tile", tile: tile1 }); + dispatch({ type: "create_tile", tile: tile2 }); + }); + + const [stateBefore] = result.current; + expect(stateBefore.tiles[stateBefore.board[1][0]].value).toBe(2); + expect(isNil(stateBefore.board[1][1])).toBeTruthy(); + expect(isNil(stateBefore.board[1][2])).toBeTruthy(); + expect(stateBefore.tiles[stateBefore.board[1][3]].value).toBe(2); + expect(stateBefore.hasChanged).toBeFalsy(); + + act(() => dispatch({ type: "move_left" })); + + const [stateAfter] = result.current; + expect(typeof stateAfter.board[1][0]).toBe("string"); + expect(stateAfter.tiles[stateAfter.board[1][0]].value).toBe(4); + expect(isNil(stateAfter.board[1][1])).toBeTruthy(); + expect(isNil(stateAfter.board[1][2])).toBeTruthy(); + expect(isNil(stateAfter.board[1][3])).toBeTruthy(); + expect(stateAfter.hasChanged).toBeTruthy(); + }); + + it("should keep hasChanged falsy if no tile changed position or value", () => { + const tile1: Tile = { + position: [0, 0], + value: 2, + }; + const tile2: Tile = { + position: [0, 1], + value: 2, + }; + + const { result } = renderHook(() => + useReducer(gameReducer, initialState), + ); + const [, dispatch] = result.current; + + act(() => { + dispatch({ type: "create_tile", tile: tile1 }); + dispatch({ type: "create_tile", tile: tile2 }); + dispatch({ type: "move_left" }); + }); + + expect(result.current[0].hasChanged).toBeFalsy(); + }); + }); + + describe("move_right", () => { + it("should move tiles to the right side of the board", () => { + const tile1: Tile = { + position: [0, 1], + value: 2, + }; + const tile2: Tile = { + position: [1, 3], + value: 2, + }; + + const { result } = renderHook(() => + useReducer(gameReducer, initialState), + ); + const [, dispatch] = result.current; + + act(() => { + dispatch({ type: "create_tile", tile: tile1 }); + dispatch({ type: "create_tile", tile: tile2 }); + }); + + const [stateBefore] = result.current; + expect(isNil(stateBefore.board[1][3])).toBeTruthy(); + expect(isNil(stateBefore.board[3][3])).toBeTruthy(); + expect(typeof stateBefore.board[1][0]).toBe("string"); + expect(typeof stateBefore.board[3][1]).toBe("string"); + expect(stateBefore.hasChanged).toBeFalsy(); + + act(() => dispatch({ type: "move_right" })); + + const [stateAfter] = result.current; + expect(typeof stateAfter.board[1][3]).toBe("string"); + expect(typeof stateAfter.board[3][3]).toBe("string"); + expect(isNil(stateAfter.board[1][0])).toBeTruthy(); + expect(isNil(stateAfter.board[3][1])).toBeTruthy(); + expect(stateAfter.hasChanged).toBeTruthy(); + }); + + it("should stack tiles with the same values on top of each other", () => { + const tile1: Tile = { + position: [0, 1], + value: 2, + }; + const tile2: Tile = { + position: [3, 1], + value: 2, + }; + + const { result } = renderHook(() => + useReducer(gameReducer, initialState), + ); + const [, dispatch] = result.current; + + act(() => { + dispatch({ type: "create_tile", tile: tile1 }); + dispatch({ type: "create_tile", tile: tile2 }); + }); + + const [stateBefore] = result.current; + expect(typeof stateBefore.board[1][0]).toBe("string"); + expect(isNil(stateBefore.board[1][1])).toBeTruthy(); + expect(isNil(stateBefore.board[1][2])).toBeTruthy(); + expect(typeof stateBefore.board[1][3]).toBe("string"); + + act(() => dispatch({ type: "move_right" })); + + const [stateAfter] = result.current; + expect(isNil(stateAfter.board[1][0])).toBeTruthy(); + expect(isNil(stateAfter.board[1][1])).toBeTruthy(); + expect(isNil(stateAfter.board[1][2])).toBeTruthy(); + expect(typeof stateAfter.board[1][3]).toBe("string"); + }); + + it("should merge tiles with the same values", () => { + const tile1: Tile = { + position: [0, 1], + value: 2, + }; + const tile2: Tile = { + position: [3, 1], + value: 2, + }; + + const { result } = renderHook(() => + useReducer(gameReducer, initialState), + ); + const [, dispatch] = result.current; + + act(() => { + dispatch({ type: "create_tile", tile: tile1 }); + dispatch({ type: "create_tile", tile: tile2 }); + }); + + const [stateBefore] = result.current; + expect(stateBefore.tiles[stateBefore.board[1][0]].value).toBe(2); + expect(isNil(stateBefore.board[1][1])).toBeTruthy(); + expect(isNil(stateBefore.board[1][2])).toBeTruthy(); + expect(stateBefore.tiles[stateBefore.board[1][3]].value).toBe(2); + expect(stateBefore.hasChanged).toBeFalsy(); + + act(() => dispatch({ type: "move_right" })); + + const [stateAfter] = result.current; + expect(isNil(stateAfter.board[1][0])).toBeTruthy(); + expect(isNil(stateAfter.board[1][1])).toBeTruthy(); + expect(isNil(stateAfter.board[1][2])).toBeTruthy(); + expect(stateAfter.tiles[stateAfter.board[1][3]].value).toBe(4); + expect(stateAfter.hasChanged).toBeTruthy(); + }); + + it("should keep hasChanged falsy if no tile changed position or value", () => { + const tile1: Tile = { + position: [3, 0], + value: 2, + }; + const tile2: Tile = { + position: [3, 1], + value: 2, + }; + + const { result } = renderHook(() => + useReducer(gameReducer, initialState), + ); + const [, dispatch] = result.current; + + act(() => { + dispatch({ type: "create_tile", tile: tile1 }); + dispatch({ type: "create_tile", tile: tile2 }); + dispatch({ type: "move_right" }); + }); + + expect(result.current[0].hasChanged).toBeFalsy(); + }); + + it("keep the original order of tiles (regression test)", () => { + const tile1: Tile = { + position: [0, 1], + value: 4, + }; + const tile2: Tile = { + position: [3, 1], + value: 2, + }; + + const { result } = renderHook(() => + useReducer(gameReducer, initialState), + ); + const [, dispatch] = result.current; + + act(() => { + dispatch({ type: "create_tile", tile: tile1 }); + dispatch({ type: "create_tile", tile: tile2 }); + }); + + const [stateBefore] = result.current; + expect(stateBefore.tiles[stateBefore.board[1][0]].value).toBe(4); + expect(isNil(stateBefore.board[1][1])).toBeTruthy(); + expect(isNil(stateBefore.board[1][2])).toBeTruthy(); + expect(stateBefore.tiles[stateBefore.board[1][3]].value).toBe(2); + + act(() => dispatch({ type: "move_right" })); + + const [stateAfter] = result.current; + expect(isNil(stateAfter.board[1][0])).toBeTruthy(); + expect(isNil(stateAfter.board[1][1])).toBeTruthy(); + expect(stateAfter.tiles[stateAfter.board[1][2]].value).toBe(4); + expect(stateAfter.tiles[stateAfter.board[1][3]].value).toBe(2); + }); + }); +}); diff --git a/app/favicon.ico b/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/app/globals.css b/app/globals.css deleted file mode 100644 index 875c01e..0000000 --- a/app/globals.css +++ /dev/null @@ -1,33 +0,0 @@ -@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)); -} - -@layer utilities { - .text-balance { - text-wrap: balance; - } -} diff --git a/app/layout.tsx b/app/layout.tsx deleted file mode 100644 index 3314e47..0000000 --- a/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/app/page.tsx b/app/page.tsx deleted file mode 100644 index 0fc5463..0000000 --- a/app/page.tsx +++ /dev/null @@ -1,113 +0,0 @@ -import Image from "next/image"; - -export default function Home() { - return ( - - ); -} diff --git a/components/board.tsx b/components/board.tsx new file mode 100644 index 0000000..6a6b851 --- /dev/null +++ b/components/board.tsx @@ -0,0 +1,94 @@ +import { useCallback, useContext, useEffect, useRef } from "react"; +import { Tile as TileModel } from "@/models/tile"; +import styles from "@/styles/board.module.css"; +import Tile from "./tile"; +import { GameContext } from "@/context/game-context"; +import MobileSwiper, { SwipeInput } from "./mobile-swiper"; + +export default function Board() { + const { getTiles, moveTiles, startGame } = useContext(GameContext); + const initialized = useRef(false); + + const handleKeyDown = useCallback( + (e: KeyboardEvent) => { + // disables page scrolling with keyboard arrows + e.preventDefault(); + + switch (e.code) { + case "ArrowUp": + moveTiles("move_up"); + break; + case "ArrowDown": + moveTiles("move_down"); + break; + case "ArrowLeft": + moveTiles("move_left"); + break; + case "ArrowRight": + moveTiles("move_right"); + break; + } + }, + [moveTiles], + ); + + const handleSwipe = useCallback( + ({ deltaX, deltaY }: SwipeInput) => { + if (Math.abs(deltaX) > Math.abs(deltaY)) { + if (deltaX > 0) { + moveTiles("move_right"); + } else { + moveTiles("move_left"); + } + } else { + if (deltaY > 0) { + moveTiles("move_down"); + } else { + moveTiles("move_up"); + } + } + }, + [moveTiles], + ); + + const renderGrid = () => { + const cells: JSX.Element[] = []; + const totalCellsCount = 16; + + for (let index = 0; index < totalCellsCount; index += 1) { + cells.push(
); + } + + return cells; + }; + + const renderTiles = () => { + return getTiles().map((tile: TileModel) => ( + + )); + }; + + useEffect(() => { + if (initialized.current === false) { + startGame(); + initialized.current = true; + } + }, [startGame]); + + useEffect(() => { + window.addEventListener("keydown", handleKeyDown); + + return () => { + window.removeEventListener("keydown", handleKeyDown); + }; + }, [handleKeyDown]); + + return ( + +
+
{renderTiles()}
+
{renderGrid()}
+
+
+ ); +} diff --git a/components/mobile-swiper.tsx b/components/mobile-swiper.tsx new file mode 100644 index 0000000..19e4223 --- /dev/null +++ b/components/mobile-swiper.tsx @@ -0,0 +1,63 @@ +import { + PropsWithChildren, + useCallback, + useEffect, + useRef, + useState, +} from "react"; + +export type SwipeInput = { deltaX: number; deltaY: number }; + +type MobileSwiperProps = PropsWithChildren<{ + onSwipe: (_: SwipeInput) => void; +}>; + +export default function MobileSwiper({ children, onSwipe }: MobileSwiperProps) { + const wrapperRef = useRef(null); + const [startX, setStartX] = useState(0); + const [startY, setStartY] = useState(0); + + const handleTouchStart = useCallback((e: TouchEvent) => { + if (!wrapperRef.current?.contains(e.target as Node)) { + return; + } + + e.preventDefault(); + + setStartX(e.touches[0].clientX); + setStartY(e.touches[0].clientY); + }, []); + + const handleTouchEnd = useCallback( + (e: TouchEvent) => { + if (!wrapperRef.current?.contains(e.target as Node)) { + return; + } + + e.preventDefault(); + + const endX = e.changedTouches[0].clientX; + const endY = e.changedTouches[0].clientY; + const deltaX = endX - startX; + const deltaY = endY - startY; + + onSwipe({ deltaX, deltaY }); + + setStartX(0); + setStartY(0); + }, + [startX, startY, onSwipe], + ); + + useEffect(() => { + window.addEventListener("touchstart", handleTouchStart, { passive: false }); + window.addEventListener("touchend", handleTouchEnd, { passive: false }); + + return () => { + window.removeEventListener("touchstart", handleTouchStart); + window.removeEventListener("touchend", handleTouchEnd); + }; + }, [handleTouchStart, handleTouchEnd]); + + return
{children}
; +} diff --git a/components/score.tsx b/components/score.tsx new file mode 100644 index 0000000..5fd1532 --- /dev/null +++ b/components/score.tsx @@ -0,0 +1,14 @@ +import { GameContext } from "@/context/game-context"; +import styles from "@/styles/score.module.css"; +import { useContext } from "react"; + +export default function Score() { + const { score } = useContext(GameContext); + + return ( +
+ Score +
{score}
+
+ ); +} diff --git a/components/tile.tsx b/components/tile.tsx new file mode 100644 index 0000000..39964d5 --- /dev/null +++ b/components/tile.tsx @@ -0,0 +1,45 @@ +import { useEffect, useState } from "react"; +import { useMediaQuery } from "react-responsive"; +import { + containerWidthMobile, + containerWidthDesktop, + mergeAnimationDuration, + tileCountPerDimension, +} from "@/constants"; +import { Tile as TileProps } from "@/models/tile"; +import styles from "@/styles/tile.module.css"; +import usePreviousProps from "@/hooks/use-previous-props"; + +export default function Tile({ position, value }: TileProps) { + const isWideScreen = useMediaQuery({ minWidth: 512 }); + const containerWidth = isWideScreen + ? containerWidthDesktop + : containerWidthMobile; + + const [scale, setScale] = useState(1); + const previousValue = usePreviousProps(value); + const hasChanged = previousValue !== value; + + const positionToPixels = (position: number) => + (position / tileCountPerDimension) * containerWidth; + + useEffect(() => { + if (hasChanged) { + setScale(1.1); + setTimeout(() => setScale(1), mergeAnimationDuration); + } + }, [hasChanged]); + + const style = { + left: positionToPixels(position[0]), + top: positionToPixels(position[1]), + transform: `scale(${scale})`, + zIndex: value, + }; + + return ( +
+ {value} +
+ ); +} diff --git a/constants.ts b/constants.ts new file mode 100644 index 0000000..34b0fe5 --- /dev/null +++ b/constants.ts @@ -0,0 +1,15 @@ +/** + * Game Layout + */ +export const containerWidthMobile = 288; // px + +export const containerWidthDesktop = 464; // px + +export const tileCountPerDimension = 4; + +/** + * Animations + */ +export const mergeAnimationDuration = 100; // ms + +export const moveAnimationDuration = 200; // ms diff --git a/context/game-context.tsx b/context/game-context.tsx new file mode 100644 index 0000000..017453b --- /dev/null +++ b/context/game-context.tsx @@ -0,0 +1,89 @@ +import { + PropsWithChildren, + createContext, + useCallback, + useEffect, + useReducer, +} from "react"; +import { isNil, throttle } from "lodash"; +import { mergeAnimationDuration, tileCountPerDimension } from "@/constants"; +import { Tile } from "@/models/tile"; +import gameReducer, { initialState } from "@/reducers/game-reducer"; + +type MoveDirection = "move_up" | "move_down" | "move_left" | "move_right"; + +export const GameContext = createContext({ + score: 0, + moveTiles: (_: MoveDirection) => {}, + getTiles: () => [] as Tile[], + startGame: () => {}, +}); + +export default function GameProvider({ children }: PropsWithChildren) { + const [gameState, dispatch] = useReducer(gameReducer, initialState); + + const getEmptyCells = () => { + const results: [number, number][] = []; + + for (let x = 0; x < tileCountPerDimension; x++) { + for (let y = 0; y < tileCountPerDimension; y++) { + if (isNil(gameState.board[y][x])) { + results.push([x, y]); + } + } + } + return results; + }; + + const appendRandomTile = () => { + const emptyCells = getEmptyCells(); + if (emptyCells.length > 0) { + const cellIndex = Math.floor(Math.random() * emptyCells.length); + const newTile = { + position: emptyCells[cellIndex], + value: 2, + }; + dispatch({ type: "create_tile", tile: newTile }); + } + }; + + const getTiles = () => { + return gameState.tilesByIds.map((tileId) => gameState.tiles[tileId]); + }; + + const moveTiles = useCallback( + throttle( + (type: MoveDirection) => dispatch({ type }), + mergeAnimationDuration * 1.05, + { trailing: false }, + ), + [dispatch], + ); + + const startGame = () => { + dispatch({ type: "create_tile", tile: { position: [0, 1], value: 2 } }); + dispatch({ type: "create_tile", tile: { position: [0, 2], value: 2 } }); + }; + + useEffect(() => { + if (gameState.hasChanged) { + setTimeout(() => { + dispatch({ type: "clean_up" }); + appendRandomTile(); + }, mergeAnimationDuration); + } + }, [gameState.hasChanged]); + + return ( + + {children} + + ); +} diff --git a/hooks/use-previous-props.ts b/hooks/use-previous-props.ts new file mode 100644 index 0000000..03cfaa0 --- /dev/null +++ b/hooks/use-previous-props.ts @@ -0,0 +1,11 @@ +import { useEffect, useRef } from "react"; + +export default function usePreviousProps(value: K) { + const ref = useRef(); + + useEffect(() => { + ref.current = value; + }); + + return ref.current; +} diff --git a/jest.config.js b/jest.config.js new file mode 100644 index 0000000..06f4acd --- /dev/null +++ b/jest.config.js @@ -0,0 +1,15 @@ +const nextJest = require("next/jest"); + +const createJestConfig = nextJest({ + // Provide the path to your Next.js app to load next.config.js and .env files in your test environment + dir: "./", +}); + +// Add any custom config to be passed to Jest +const customJestConfig = { + setupFilesAfterEnv: ["/jest.setup.js"], + testEnvironment: "jest-environment-jsdom", +}; + +// createJestConfig is exported this way to ensure that next/jest can load the Next.js config which is async +module.exports = createJestConfig(customJestConfig); diff --git a/jest.setup.js b/jest.setup.js new file mode 100644 index 0000000..d0de870 --- /dev/null +++ b/jest.setup.js @@ -0,0 +1 @@ +import "@testing-library/jest-dom"; diff --git a/models/tile.ts b/models/tile.ts new file mode 100644 index 0000000..df4c620 --- /dev/null +++ b/models/tile.ts @@ -0,0 +1,7 @@ +export type Tile = { + id?: string; + position: [number, number]; + value: number; +}; + +export type TileMap = { [id: string]: Tile }; diff --git a/next.config.js b/next.config.js new file mode 100644 index 0000000..4b541e1 --- /dev/null +++ b/next.config.js @@ -0,0 +1,7 @@ +/** @type {import('next').NextConfig} */ +const nextConfig = { + output: "export", + reactStrictMode: true, +}; + +module.exports = nextConfig; diff --git a/next.config.mjs b/next.config.mjs deleted file mode 100644 index 61bedf9..0000000 --- a/next.config.mjs +++ /dev/null @@ -1,10 +0,0 @@ -/** - * @type {import('next').NextConfig} - */ -const nextConfig = { - basePath: "/verifeye", - output: "export", - reactStrictMode: true, -}; - -export default nextConfig; \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 69673f7..80c6995 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,1182 +1,3644 @@ { - "name": "verifeye", - "version": "0.1.0", + "name": "2048-in-react", + "version": "0.2.0", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "verifeye", - "version": "0.1.0", - "dependencies": { - "next": "14.1.2", - "react": "^18", - "react-dom": "^18" + "name": "2048-in-react", + "version": "0.2.0", + "license": "MIT", + "dependencies": { + "@types/node": "20.5.1", + "@types/react": "18.2.20", + "@types/react-dom": "18.2.7", + "eslint": "8.47.0", + "eslint-config-next": "14.0.4", + "lodash": "4.17.21", + "next": "14.0.4", + "react": "18.2.0", + "react-dom": "18.2.0", + "react-responsive": "9.0.2", + "typescript": "5.1.6", + "uid": "2.0.2" }, "devDependencies": { - "@types/node": "^20", - "@types/react": "^18", - "@types/react-dom": "^18", - "autoprefixer": "^10.0.1", - "eslint": "^8", - "eslint-config-next": "14.1.2", - "postcss": "^8", - "tailwindcss": "^3.3.0", - "typescript": "^5" + "@testing-library/jest-dom": "6.1.5", + "@testing-library/react": "14.1.2", + "@types/jest": "29.5.11", + "@types/lodash": "4.14.202", + "@typescript-eslint/typescript-estree": "6.15.0", + "jest": "29.7.0", + "jest-environment-jsdom": "29.7.0", + "prettier": "3.1.1" } }, "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/@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==", + "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==", + "dev": true + }, + "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, - "engines": { - "node": ">=10" + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=6.0.0" } }, - "node_modules/@babel/runtime": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.0.tgz", - "integrity": "sha512-Chk32uHMg6TnQdvw2e9IlqPpFX/6NLuK0Ys2PqLb7/gL5uFn9mXvK715FGLlOLQrcO4qIkNHkvPGktzzXexsFw==", + "node_modules/@babel/code-frame": { + "version": "7.22.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", + "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", "dev": true, "dependencies": { - "regenerator-runtime": "^0.14.0" + "@babel/highlight": "^7.22.13", + "chalk": "^2.4.2" }, "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==", + "node_modules/@babel/code-frame/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": { - "eslint-visitor-keys": "^3.3.0" + "color-convert": "^1.9.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + "node": ">=4" } }, - "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/code-frame/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": "^12.0.0 || ^14.0.0 || >=16.0.0" + "node": ">=4" } }, - "node_modules/@eslint/eslintrc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "node_modules/@babel/code-frame/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": { - "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" - }, + "color-name": "1.1.3" + } + }, + "node_modules/@babel/code-frame/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/code-frame/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": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "node": ">=0.8.0" } }, - "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/code-frame/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": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=4" } }, - "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/code-frame/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": { - "@humanwhocodes/object-schema": "^2.0.2", - "debug": "^4.3.1", - "minimatch": "^3.0.5" + "has-flag": "^3.0.0" }, "engines": { - "node": ">=10.10.0" + "node": ">=4" } }, - "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/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": ">=12.22" + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.11.tgz", + "integrity": "sha512-lh7RJrtPdhibbxndr6/xx0w8+CVlY5FJZiaSz908Fpy+G0xkBFTvwLcKJFF4PJxVfGhVWNebikpWGnOoC71juQ==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.22.10", + "@babel/generator": "^7.22.10", + "@babel/helper-compilation-targets": "^7.22.10", + "@babel/helper-module-transforms": "^7.22.9", + "@babel/helpers": "^7.22.11", + "@babel/parser": "^7.22.11", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.11", + "@babel/types": "^7.22.11", + "convert-source-map": "^1.7.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": "github", - "url": "https://github.com/sponsors/nzakas" + "type": "opencollective", + "url": "https://opencollective.com/babel" } }, - "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==", + "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/@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/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, - "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" + "bin": { + "json5": "lib/cli.js" }, "engines": { - "node": ">=12" + "node": ">=6" } }, - "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/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, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" + "bin": { + "semver": "bin/semver.js" } }, - "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/generator": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.3.tgz", + "integrity": "sha512-keeZWAV4LU3tW0qRi19HRpabC/ilM0HRBBzf9/k8FFiG4KVpiv0FIy4hHfLfFQZNhziCTPTmd59zoyv6DNISzg==", "dev": true, "dependencies": { - "ansi-regex": "^6.0.1" + "@babel/types": "^7.23.3", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" + "node": ">=6.9.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==", + "node_modules/@babel/helper-compilation-targets": { + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.10.tgz", + "integrity": "sha512-JMSwHD4J7SLod0idLq5PKgI+6g/hLD/iuWBq08ZX49xE14VpVEojJ5rHWptpirV2j020MvypRLAXAO50igCJ5Q==", "dev": true, "dependencies": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.24" + "@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.0.0" + "node": ">=6.9.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==", + "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, - "engines": { - "node": ">=6.0.0" + "dependencies": { + "yallist": "^3.0.2" } }, - "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==", + "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, - "engines": { - "node": ">=6.0.0" + "bin": { + "semver": "bin/semver.js" } }, - "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/@babel/helper-compilation-targets/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/@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==", + "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": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" + }, + "engines": { + "node": ">=6.9.0" } }, - "node_modules/@next/env": { - "version": "14.1.2", - "resolved": "https://registry.npmjs.org/@next/env/-/env-14.1.2.tgz", - "integrity": "sha512-U0iEG+JF86j6qyu330sfPgsMmDVH8vWVmzZadl+an5EU3o5HqdNytOpM+HsFpl58PmhGBTKx3UmM9c+eoLK0mA==" + "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/@next/eslint-plugin-next": { - "version": "14.1.2", - "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-14.1.2.tgz", - "integrity": "sha512-k9h9NfR1joJI48uwdQd/DuOV1mBgcjlmWaX45eAXCFGT96oc+/6SMjO3s7naVtTXqSKjFAgk2GDlW6Hv41ROXQ==", + "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": { - "glob": "10.3.10" + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" } }, - "node_modules/@next/swc-darwin-arm64": { - "version": "14.1.2", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.1.2.tgz", - "integrity": "sha512-E4/clgk0ZrYMo9eMRwP/4IO/cvXF1yEYSnGcdGfH+NYTR8bNFy76TSlc1Vb2rK3oaQY4BVHRpx8f/sMN/D5gNw==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "darwin" - ], + "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": ">= 10" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "node_modules/@next/swc-darwin-x64": { - "version": "14.1.2", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.1.2.tgz", - "integrity": "sha512-j8mEOI+ZM0tU9B/L/OGa6F7d9FXYMkog5OWWuhTWzz3iZ91UKIGGpD/ojTNKuejainDMgbqOBTNnLg0jZywM/g==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "darwin" - ], + "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": ">= 10" + "node": ">=6.9.0" } }, - "node_modules/@next/swc-linux-arm64-gnu": { - "version": "14.1.2", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.1.2.tgz", - "integrity": "sha512-qpRrd5hl6BFTWiFLgHtJmqqQGRMs+ol0MN9pEp0SYoLs3j8OTErPiDMhbKWjMWHGdc2E3kg4RRBV3cSTZiePiQ==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], + "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": ">= 10" + "node": ">=6.9.0" } }, - "node_modules/@next/swc-linux-arm64-musl": { - "version": "14.1.2", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.1.2.tgz", - "integrity": "sha512-HAhvVXAv+wnbj0wztT0YnpgJVoHtw1Mv4Y1R/JJcg5yXSU8FsP2uEGUwjQaqPoD76YSZjuKl32YbJlmPgQbLFw==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], + "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": ">= 10" + "node": ">=6.9.0" } }, - "node_modules/@next/swc-linux-x64-gnu": { - "version": "14.1.2", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.1.2.tgz", - "integrity": "sha512-PCWC312woXLWOXiedi1E+fEw6B/ECP1fMiK1nSoGS2E43o56Z8kq4WeJLbJoufFQGVj5ZOKU3jIVyV//3CI4wQ==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], + "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==", + "dev": true, "engines": { - "node": ">= 10" + "node": ">=6.9.0" } }, - "node_modules/@next/swc-linux-x64-musl": { - "version": "14.1.2", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.1.2.tgz", - "integrity": "sha512-KQSKzdWPNrYZjeTPCsepEpagOzU8Nf3Zzu53X1cLsSY6QlOIkYcSgEihRjsMKyeQW4aSvc+nN5pIpC2pLWNSMA==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], + "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": ">= 10" + "node": ">=6.9.0" } }, - "node_modules/@next/swc-win32-arm64-msvc": { - "version": "14.1.2", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.1.2.tgz", - "integrity": "sha512-3b0PouKd09Ulm2T1tjaRnwQj9+UwSsMO680d/sD4XAlm29KkNmVLAEIwWTfb3L+E11Qyw+jdcN3HtbDCg5+vYA==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "win32" - ], + "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": ">= 10" + "node": ">=6.9.0" } }, - "node_modules/@next/swc-win32-ia32-msvc": { - "version": "14.1.2", - "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.1.2.tgz", - "integrity": "sha512-CC1gaJY4h+wg6d5r2biggGM6nCFXh/6WEim2VOQI0WrA6easCQi2P2hzWyrU6moQ0g1GOiWzesGc6nn0a92Kgg==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "win32" - ], + "node_modules/@babel/helpers": { + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.11.tgz", + "integrity": "sha512-vyOXC8PBWaGc5h7GMsNx68OH33cypkEDJCHvYVVgVbbxJDROYVtexSk0gK5iCF1xNjRIN2s8ai7hwkWDq5szWg==", + "dev": true, + "dependencies": { + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.11", + "@babel/types": "^7.22.11" + }, "engines": { - "node": ">= 10" + "node": ">=6.9.0" } }, - "node_modules/@next/swc-win32-x64-msvc": { - "version": "14.1.2", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.1.2.tgz", - "integrity": "sha512-pfASwanOd+yP3D80O63DuQffrBySZPuB7wRN0IGSRq/0rDm9p/MvvnLzzgP2kSiLOUklOrFYVax7P6AEzjGykQ==", - "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==", + "node_modules/@babel/highlight": { + "version": "7.22.13", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.13.tgz", + "integrity": "sha512-C/BaXcnnvBCmHTpz/VGZ8jgtE2aYlW4hxDhseJAWZb7gqGM/qtCK6iZUb0TyKFf7BOUsBH7Q7fkRsDRhg1XklQ==", "dev": true, "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" + "@babel/helper-validator-identifier": "^7.22.5", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0" }, "engines": { - "node": ">= 8" + "node": ">=6.9.0" } }, - "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/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": ">= 8" + "node": ">=4" } }, - "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/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.scandir": "2.1.5", - "fastq": "^1.6.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.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/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, - "optional": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/@rushstack/eslint-patch": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.7.2.tgz", - "integrity": "sha512-RbhOOTCNoCrbfkRyoXODZp75MlpiHMgbE5MEBZAnnnLyQNgrigEj4p0lzsMDyc1zVsJDLrivB58tgg3emX0eEA==", - "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" + "color-name": "1.1.3" } }, - "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/@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/@types/node": { - "version": "20.11.24", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.24.tgz", - "integrity": "sha512-Kza43ewS3xoLgCEpQrsT+xRo/EJej1y0kVYGiLFE1NEODXGzTfwiC6tXTLMQskn1X4/Rjlh0MQUvx9W+L9long==", + "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, - "dependencies": { - "undici-types": "~5.26.4" + "engines": { + "node": ">=0.8.0" } }, - "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.63", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.63.tgz", - "integrity": "sha512-ppaqODhs15PYL2nGUOaOu2RSCCB4Difu4UFrP4I3NHLloXC/ESQzQMi9nvjfT1+rudd0d2L3fQPJxRSey+rGlQ==", + "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, - "dependencies": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" + "engines": { + "node": ">=4" } }, - "node_modules/@types/react-dom": { - "version": "18.2.19", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.19.tgz", - "integrity": "sha512-aZvQL6uUbIJpjZk4U8JZGbau9KDeAwMfmhyWorxgBkqDIEf6ROjRozcmPIicqsUwPUjbkDfHKgGee1Lq65APcA==", + "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": { - "@types/react": "*" + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" } }, - "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.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.21.0.tgz", - "integrity": "sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==", + "node_modules/@babel/parser": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.3.tgz", + "integrity": "sha512-uVsWNvlVsIninV2prNz/3lHCb+5CJ+e+IUBfbjToAHODtfGYLfCFuY4AU7TskI+dAKk+njsPiBjq1gKTvZOBaw==", "dev": true, - "dependencies": { - "@typescript-eslint/scope-manager": "6.21.0", - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/typescript-estree": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0", - "debug": "^4.3.4" + "bin": { + "parser": "bin/babel-parser.js" }, "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "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": { - "eslint": "^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "@babel/core": "^7.0.0-0" } }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz", - "integrity": "sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==", + "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": { - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" + "@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/types": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.21.0.tgz", - "integrity": "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==", + "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, - "engines": { - "node": "^16.0.0 || >=18.0.0" + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz", - "integrity": "sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==", + "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": { - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.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" + "@babel/helper-plugin-utils": "^7.10.4" }, - "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-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": { - "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-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": { - "brace-expansion": "^2.0.1" + "@babel/helper-plugin-utils": "^7.22.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": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz", - "integrity": "sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==", + "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": "6.21.0", - "eslint-visitor-keys": "^3.4.1" + "@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/@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/@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/acorn": { - "version": "8.11.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", - "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "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, - "bin": { - "acorn": "bin/acorn" + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" }, - "engines": { - "node": ">=0.4.0" + "peerDependencies": { + "@babel/core": "^7.0.0-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/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": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + "@babel/core": "^7.0.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==", + "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": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" + "@babel/helper-plugin-utils": "^7.8.0" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "peerDependencies": { + "@babel/core": "^7.0.0-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/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, - "engines": { - "node": ">=8" + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "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/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": { - "color-convert": "^2.0.1" + "@babel/helper-plugin-utils": "^7.14.5" }, "engines": { - "node": ">=8" + "node": ">=6.9.0" }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "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==", - "dev": true - }, - "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==", + "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": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { - "node": ">= 8" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "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==", - "dev": true - }, - "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, + "node_modules/@babel/runtime": { + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.10.tgz", + "integrity": "sha512-21t/fkKLMZI4pqP2wlmsQAWnYW1PDyKyyUV4vCi+B25ydmdaYTKXPwCj0BzSUnZf4seIiYvSA3jcZ3gdsMFkLQ==", "dependencies": { - "dequal": "^2.0.3" + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.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/@babel/template": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", + "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", "dev": true, "dependencies": { - "call-bind": "^1.0.5", - "is-array-buffer": "^3.0.4" + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=6.9.0" } }, - "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==", + "node_modules/@babel/traverse": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.3.tgz", + "integrity": "sha512-+K0yF1/9yR0oHdE0StHuEj3uTPzwwbrLGfNOndVJVV2TqA5+j3oljJUb4nmB954FLGjNem976+B+eDuLIjesiQ==", "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" + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.23.3", + "@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.3", + "@babel/types": "^7.23.3", + "debug": "^4.1.0", + "globals": "^11.1.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=6.9.0" } }, - "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/@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/array.prototype.filter": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array.prototype.filter/-/array.prototype.filter-1.0.3.tgz", - "integrity": "sha512-VizNcj/RGJiUyQBgzwxzE5oHdeuXY5hSbbmKMlphj1cy1Vl7Pn2asCGbSrru6hSQjmCzqTBPVWAF/whmEOVHbw==", + "node_modules/@babel/types": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.3.tgz", + "integrity": "sha512-OZnvoH2l8PK5eUvEcUyCt/sXgr/h+UWpVuBbOljwcrAgUl6lpchoQ++PHGyQy1AtYnVA6CEq3y5xeEI10brpXw==", "dev": true, "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" + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.20", + "to-fast-properties": "^2.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=6.9.0" } }, - "node_modules/array.prototype.findlast": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.4.tgz", - "integrity": "sha512-BMtLxpV+8BD+6ZPFIWmnUBpQoy+A+ujcg4rhp2iwCRJYA7PEh2MS4NL3lz8EiDlLrJPp2hg9qWihr5pd//jcGw==", - "dev": true, + "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==", "dependencies": { - "call-bind": "^1.0.5", - "define-properties": "^1.2.1", - "es-abstract": "^1.22.3", - "es-errors": "^1.3.0", - "es-shim-unscopables": "^1.0.2" + "eslint-visitor-keys": "^3.3.0" }, "engines": { - "node": ">= 0.4" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, - "node_modules/array.prototype.findlastindex": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.4.tgz", - "integrity": "sha512-hzvSHUshSpCflDR1QMUBLHGHP1VIEBegT4pix9H/Z92Xw3ySoy6c2qh7lJWTJnRJ8JCZ9bJNCgTyYaJGcJu6xQ==", - "dev": true, + "node_modules/@eslint-community/regexpp": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.6.2.tgz", + "integrity": "sha512-pPTNuaAG3QMH+buKyBIGJs3g/S5y0caxw0ygM3YyE6yJFySwiGGSzA+mM3KJ8QQvzeLh3blwgSonkFjgQdxzMw==", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.2.tgz", + "integrity": "sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==", "dependencies": { - "call-bind": "^1.0.5", - "define-properties": "^1.2.1", - "es-abstract": "^1.22.3", - "es-errors": "^1.3.0", - "es-shim-unscopables": "^1.0.2" + "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.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, + "node_modules/@eslint/js": { + "version": "8.47.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.47.0.tgz", + "integrity": "sha512-P6omY1zv5MItm93kLM8s2vr1HICJH8v0dvddDhysbIuZ+vcjOHg5Zbkf1mTkcmi2JA9oBG2anOkRnW8WJTS8Og==", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz", + "integrity": "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.5" }, "engines": { - "node": ">= 0.4" + "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": { - "url": "https://github.com/sponsors/ljharb" + "type": "github", + "url": "https://github.com/sponsors/nzakas" } }, - "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/@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==" + }, + "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": ">= 0.4" + "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" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=8" } }, - "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/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": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/array.prototype.tosorted": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.3.tgz", - "integrity": "sha512-/DdH4TiTmOKzyQbp/eadcCVexiCb36xJg7HshYOYJnNZFDj33GEv0P7GxsynpShhq4OLYJzbGcBDkLsDt7MnNg==", + "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": { - "call-bind": "^1.0.5", - "define-properties": "^1.2.1", - "es-abstract": "^1.22.3", - "es-errors": "^1.1.0", - "es-shim-unscopables": "^1.0.2" + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" } }, - "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/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": { - "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" + "p-try": "^2.0.0" }, "engines": { - "node": ">= 0.4" + "node": ">=6" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "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==", + "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": { - "has-symbols": "^1.0.3" + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/autoprefixer": { - "version": "10.4.18", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.18.tgz", - "integrity": "sha512-1DKbDfsr6KUElM6wg+0zRNkB/Q7WcKYAaK+pzXn+Xqmszm/5Xa9coeNdtP88Vi+dPzZnMjhge8GIV49ZQkDa+g==", + "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, - "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.23.0", - "caniuse-lite": "^1.0.30001591", - "fraction.js": "^4.3.7", - "normalize-range": "^0.1.2", - "picocolors": "^1.0.0", - "postcss-value-parser": "^4.2.0" - }, - "bin": { - "autoprefixer": "bin/autoprefixer" + "@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 || ^12 || >=14" - }, - "peerDependencies": { - "postcss": "^8.1.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "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/@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": { - "possible-typed-array-names": "^1.0.0" + "@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/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/@jest/core/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": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "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/@jest/core/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": { - "dequal": "^2.0.3" + "@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/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/@jest/core/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/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "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": ">=8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "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/@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": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "expect": "^29.7.0", + "jest-snapshot": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "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": { - "fill-range": "^7.0.1" + "jest-get-type": "^29.6.3" }, "engines": { - "node": ">=8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/browserslist": { - "version": "4.23.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz", - "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==", + "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, - "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" + "@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": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "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/globals": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", + "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", + "dev": true, "dependencies": { - "streamsearch": "^1.1.0" + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/types": "^29.6.3", + "jest-mock": "^29.7.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/reporters": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", + "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", "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" + "@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/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "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": ">=6" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "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==", + "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, - "engines": { - "node": ">= 6" + "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.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dev": true, + "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==", + "dev": true, + "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==", + "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.19", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", + "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@lukeed/csprng": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@lukeed/csprng/-/csprng-1.1.0.tgz", + "integrity": "sha512-Z7C/xXCiGWsg0KuKsHTKJxbWhpI3Vs5GwLfOean7MGyVFGqdRgBbAjOCh6u4bbjPc/8MJ2pZmK/0DLdCbivLDA==", + "engines": { + "node": ">=8" + } + }, + "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==", + "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==", + "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/@rushstack/eslint-patch": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.3.3.tgz", + "integrity": "sha512-0xd7qez0AQ+MbHatZTlI1gu5vkG8r7MYRUJAHPAHJBmGLs16zpkrpAVLvjQKQOqaXPDUBwOiJzNc00znHSCVBw==" + }, + "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/@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/@testing-library/dom": { + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-9.3.1.tgz", + "integrity": "sha512-0DGPd9AR3+iDTjGoMpxIkAsUihHZ3Ai6CneU6bRRrffXMgzCdlNk43jTrD2/5LT6CBb3MWTP8v510JzYtahD2w==", + "dev": 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/aria-query": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", + "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", + "dev": true, + "dependencies": { + "deep-equal": "^2.0.5" + } + }, + "node_modules/@testing-library/jest-dom": { + "version": "6.1.5", + "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-6.1.5.tgz", + "integrity": "sha512-3y04JLW+EceVPy2Em3VwNr95dOKqA8DhR0RJHhHKDZNYXcVXnEK7WIrpj4eYU8SVt/qYZ2aRWt/WgQ+grNES8g==", + "dev": true, + "dependencies": { + "@adobe/css-tools": "^4.3.1", + "@babel/runtime": "^7.9.2", + "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": ">=14", + "npm": ">=6", + "yarn": ">=1" + }, + "peerDependencies": { + "@jest/globals": ">= 28", + "@types/jest": ">= 28", + "jest": ">= 28", + "vitest": ">= 0.32" + }, + "peerDependenciesMeta": { + "@jest/globals": { + "optional": true + }, + "@types/jest": { + "optional": true + }, + "jest": { + "optional": true + }, + "vitest": { + "optional": true + } + } + }, + "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==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@testing-library/react": { + "version": "14.1.2", + "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-14.1.2.tgz", + "integrity": "sha512-z4p7DVBTPjKM5qDZ0t5ZjzkpSNb+fZy1u6bzO7kk8oeGagpPCAtgh4cx1syrfp7a+QWkM021jGqjJaxJJnXAZg==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.12.5", + "@testing-library/dom": "^9.0.0", + "@types/react-dom": "^18.0.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "react": "^18.0.0", + "react-dom": "^18.0.0" + } + }, + "node_modules/@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@types/aria-query": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.1.tgz", + "integrity": "sha512-XTIieEY+gvJ39ChLcB4If5zHtPxt3Syj5rgZR+e1ctpmK8NjPf0zFqsz4JpLJT0xla9GFDKjy8Cpu331nrmE1Q==", + "dev": true + }, + "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.4", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.4.tgz", + "integrity": "sha512-mSM/iKUk5fDDrEV/e83qY+Cr3I1+Q3qqTuEn++HAWYjEa1+NxZr6CNrcJGf2ZTnq4HoFGC3zaTPZTobCzCFukA==", + "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.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.11", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.11.tgz", + "integrity": "sha512-S2mHmYIVe13vrm6q4kN6fLYYAka15ALQki/vgDC3mIukEOx8WJlv0kQPM+d4w8Gp6u0uSdKND04IlTXBv0rwnQ==", + "dev": true, + "dependencies": { + "expect": "^29.0.0", + "pretty-format": "^29.0.0" + } + }, + "node_modules/@types/jest/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/@types/jest/node_modules/pretty-format": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.3.tgz", + "integrity": "sha512-ZsBgjVhFAj5KeK+nHfF1305/By3lechHQSMWCTl8iHSbfOm2TN5nHEtFc/+W7fAyUeCs2n5iow72gld4gW0xDw==", + "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/@types/jest/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/@types/jsdom": { + "version": "20.0.1", + "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-20.0.1.tgz", + "integrity": "sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==", + "dev": true, + "dependencies": { + "@types/node": "*", + "@types/tough-cookie": "*", + "parse5": "^7.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==" + }, + "node_modules/@types/lodash": { + "version": "4.14.202", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.202.tgz", + "integrity": "sha512-OvlIYQK9tNneDlS0VN54LLd5uiPCBOp7gS5Z0f1mjoJYBrtStzgmJBxONW3U6OZqdtNzZPmn9BS/7WI7BFFcFQ==", + "dev": true + }, + "node_modules/@types/node": { + "version": "20.5.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.5.1.tgz", + "integrity": "sha512-4tT2UrL5LBqDwoed9wZ6N3umC4Yhz3W3FloMmiiG4JwmUJWpie0c7lcnUNd4gtMKuDEO4wRVS8B6Xa0uMRsMKg==" + }, + "node_modules/@types/prop-types": { + "version": "15.7.5", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", + "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" + }, + "node_modules/@types/react": { + "version": "18.2.20", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.20.tgz", + "integrity": "sha512-WKNtmsLWJM/3D5mG4U84cysVY31ivmyw85dE84fOCk5Hx78wezB/XEjVPWl2JTZ5FkEeaTJf+VgUAUn3PE7Isw==", + "dependencies": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "18.2.7", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.7.tgz", + "integrity": "sha512-GRaAEriuT4zp9N4p1i8BDBYmEyfo+xQ3yHjJU4eiK5NDa1RmUZG+unZABUTK4/Ox/M+GaHwb6Ow8rUITrtjszA==", + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/scheduler": { + "version": "0.16.3", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.3.tgz", + "integrity": "sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==" + }, + "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/tough-cookie": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.2.tgz", + "integrity": "sha512-Q5vtl1W5ue16D+nIaW8JWebSSraJVlK+EthKn7e7UcD4KWsaSJ8BqGPXNaPghgtcn/fhvrN17Tv8ksUsQpiplw==", + "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/@typescript-eslint/parser": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.4.0.tgz", + "integrity": "sha512-I1Ah1irl033uxjxO9Xql7+biL3YD7w9IU8zF+xlzD/YxY6a4b7DYA08PXUUCbm2sEljwJF6ERFy2kTGAGcNilg==", + "dependencies": { + "@typescript-eslint/scope-manager": "6.4.0", + "@typescript-eslint/types": "6.4.0", + "@typescript-eslint/typescript-estree": "6.4.0", + "@typescript-eslint/visitor-keys": "6.4.0", + "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/parser/node_modules/@typescript-eslint/typescript-estree": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.4.0.tgz", + "integrity": "sha512-iDPJArf/K2sxvjOR6skeUCNgHR/tCQXBsa+ee1/clRKr3olZjZ/dSkXPZjG6YkPtnW6p5D1egeEPMCW6Gn4yLA==", + "dependencies": { + "@typescript-eslint/types": "6.4.0", + "@typescript-eslint/visitor-keys": "6.4.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.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/scope-manager": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.4.0.tgz", + "integrity": "sha512-TUS7vaKkPWDVvl7GDNHFQMsMruD+zhkd3SdVW0d7b+7Zo+bd/hXJQ8nsiUZMi1jloWo6c9qt3B7Sqo+flC1nig==", + "dependencies": { + "@typescript-eslint/types": "6.4.0", + "@typescript-eslint/visitor-keys": "6.4.0" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.4.0.tgz", + "integrity": "sha512-+FV9kVFrS7w78YtzkIsNSoYsnOtrYVnKWSTVXoL1761CsCRv5wpDOINgsXpxD67YCLZtVQekDDyaxfjVWUJmmg==", + "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.15.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.15.0.tgz", + "integrity": "sha512-7mVZJN7Hd15OmGuWrp2T9UvqR2Ecg+1j/Bp1jXUEY2GZKV6FXlOIoqVDmLpBiEiq3katvj/2n2mR0SDwtloCew==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "6.15.0", + "@typescript-eslint/visitor-keys": "6.15.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.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/@typescript-eslint/types": { + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.15.0.tgz", + "integrity": "sha512-yXjbt//E4T/ee8Ia1b5mGlbNj9fB9lJP4jqLbZualwpP2BCQ5is6BcWwxpIsY4XKAhmdv3hrW92GdtJbatC6dQ==", + "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/node_modules/@typescript-eslint/visitor-keys": { + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.15.0.tgz", + "integrity": "sha512-1zvtdC1a9h5Tb5jU9x3ADNXO9yjP8rXlaoChu0DQX40vf5ACVpYIVIZhIMZ6d5sDXH7vq4dsZBT1fEGj8D2n2w==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "6.15.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/@typescript-eslint/visitor-keys": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.4.0.tgz", + "integrity": "sha512-yJSfyT+uJm+JRDWYRYdCm2i+pmvXJSMtPR9Cq5/XQs4QIgNoLcoRtDdzsLbLsFM/c6um6ohQkg/MLxWvoIndJA==", + "dependencies": { + "@typescript-eslint/types": "6.4.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/abab": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", + "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", + "dev": true + }, + "node_modules/acorn": { + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", + "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-globals": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-7.0.1.tgz", + "integrity": "sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==", + "dev": true, + "dependencies": { + "acorn": "^8.1.0", + "acorn-walk": "^8.0.2" + } + }, + "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": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "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==", + "dev": true, + "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/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==", + "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==", + "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==" + }, + "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-includes": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz", + "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "get-intrinsic": "^1.1.3", + "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.2", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.2.tgz", + "integrity": "sha512-tb5thFFlUcp7NdNF6/MpDk/1r/4awWG1FIz3YqDf+/zJSTezBb+/5WViH41obXULHVpDzoiCLpJ/ZO9YbJMsdw==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0", + "get-intrinsic": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz", + "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "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.1", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz", + "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "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.1", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz", + "integrity": "sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0", + "get-intrinsic": "^1.1.3" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.1.tgz", + "integrity": "sha512-09x0ZWFEjj4WD8PDbykUwo3t9arLn8NIzmmYEJFpYekOAQjpkGSyrQhNoRTcwwcFRu+ycWF78QZ63oWTqSjBcw==", + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "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.7", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", + "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==" + }, + "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==", + "dev": true + }, + "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.2", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.7.2.tgz", + "integrity": "sha512-zIURGIS1E1Q4pcrMjp+nnEh+16G56eG/MUllJH8yEvw7asDo7Ac9uhC9KIH5jzpITueEZolfYglnCGIuSBz39g==", + "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": "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==" + }, + "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/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/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.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "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.30001522", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001522.tgz", + "integrity": "sha512-TKiyTVZxJGhsTszLuzb+6vUZSjVOAhClszBr2Ta2k9IwtNBT/4dzmL6aywt0HCgEZlmwJzXJd8yNiob6HgwTRg==", + "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==", + "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/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/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==", + "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==" + }, + "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==", + "dev": true, + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "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/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/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==", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/css-mediaquery": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/css-mediaquery/-/css-mediaquery-0.1.2.tgz", + "integrity": "sha512-COtn4EROW5dBGlE/4PiKnh6rZpAPxDeFLaEEwt4i10jpDMFt2EhQGS79QmmrO+iKCHv0PU/HrOWEhijFd1x99Q==" + }, + "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==", + "dev": true + }, + "node_modules/cssom": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz", + "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==", + "dev": true + }, + "node_modules/cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "dev": true, + "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==", + "dev": true + }, + "node_modules/csstype": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", + "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==" + }, + "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": "3.0.2", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz", + "integrity": "sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==", + "dev": true, + "dependencies": { + "abab": "^2.0.6", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^11.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "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==", + "dev": 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/deep-equal": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.2.tgz", + "integrity": "sha512-xjVyBf0w5vH0I42jdAZzOKVldmPgSulmiyPRywoyq7HXC9qdgo17kxJE+rdnif5Tz6+pIrpJI8dCpMNLIGkUiA==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.2", + "es-get-iterator": "^1.1.3", + "get-intrinsic": "^1.2.1", + "is-arguments": "^1.1.1", + "is-array-buffer": "^3.0.2", + "is-date-object": "^1.0.5", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "isarray": "^2.0.5", + "object-is": "^1.1.5", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.5.0", + "side-channel": "^1.0.4", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.9" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/deep-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==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-properties": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", + "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", + "dependencies": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "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/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==", + "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==", + "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==", + "dev": true + }, + "node_modules/domexception": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", + "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==", + "dev": true, + "dependencies": { + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.4.505", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.505.tgz", + "integrity": "sha512-0A50eL5BCCKdxig2SsCXhpuztnB9PfUgRMojj5tMvt8O54lbwz3t6wNgnpiTRosw5QjlJB7ixhVyeg8daLQwSQ==", + "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==" + }, + "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": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "engines": { + "node": ">=0.12" + }, + "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==", + "dev": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-abstract": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.1.tgz", + "integrity": "sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw==", + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "arraybuffer.prototype.slice": "^1.0.1", + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "es-set-tostringtag": "^2.0.1", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.2.1", + "get-symbol-description": "^1.0.0", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.5", + "is-array-buffer": "^3.0.2", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.10", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.3", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.5.0", + "safe-array-concat": "^1.0.0", + "safe-regex-test": "^1.0.0", + "string.prototype.trim": "^1.2.7", + "string.prototype.trimend": "^1.0.6", + "string.prototype.trimstart": "^1.0.6", + "typed-array-buffer": "^1.0.0", + "typed-array-byte-length": "^1.0.0", + "typed-array-byte-offset": "^1.0.0", + "typed-array-length": "^1.0.4", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "dev": true, + "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.13", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.13.tgz", + "integrity": "sha512-LK3VGwzvaPWobO8xzXXGRUOGw8Dcjyfk62CsY/wfHN75CwsJPbuypOYJxK6g5RyEL8YDjIWcl6jgd8foO6mmrA==", + "dependencies": { + "asynciterator.prototype": "^1.0.0", + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.21.3", + "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.0", + "safe-array-concat": "^1.0.0" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", + "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", + "dependencies": { + "get-intrinsic": "^1.1.3", + "has": "^1.0.3", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", + "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", + "dependencies": { + "has": "^1.0.3" + } + }, + "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==", + "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==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/escodegen": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "dev": true, + "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/eslint": { + "version": "8.47.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.47.0.tgz", + "integrity": "sha512-spUQWrdPt+pRVP1TTJLmfRNJJHHZryFmptzcafwSvHsceV81djHOdnEeDmkdotZyLNjDhrOasNK8nikkoG1O8Q==", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.2", + "@eslint/js": "^8.47.0", + "@humanwhocodes/config-array": "^0.11.10", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "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==", + "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==", + "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-import-resolver-typescript": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.0.tgz", + "integrity": "sha512-QTHR9ddNnn35RTxlaEnx2gCxqFlF2SEN0SE2d17SqwyM7YOSI2GHWRYp5BiRkObTUNYPupC/3Fq2a0PpT+EKpg==", + "dependencies": { + "debug": "^4.3.4", + "enhanced-resolve": "^5.12.0", + "eslint-module-utils": "^2.7.4", + "fast-glob": "^3.3.1", + "get-tsconfig": "^4.5.0", + "is-core-module": "^2.11.0", + "is-glob": "^4.0.3" + }, + "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==", + "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-import": { + "version": "2.28.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.28.1.tgz", + "integrity": "sha512-9I9hFlITvOV55alzoKBI+K9q74kv0iKMeY6av5+umsNwayt59fz692daGyjR+oStBQgx6nwR9rXldDev3Clw+A==", + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.findlastindex": "^1.2.2", + "array.prototype.flat": "^1.3.1", + "array.prototype.flatmap": "^1.3.1", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.7", + "eslint-module-utils": "^2.8.0", + "has": "^1.0.3", + "is-core-module": "^2.13.0", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.6", + "object.groupby": "^1.0.0", + "object.values": "^1.1.6", + "semver": "^6.3.1", + "tsconfig-paths": "^3.14.2" + }, + "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-jsx-a11y": { + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.7.1.tgz", + "integrity": "sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==", + "dependencies": { + "@babel/runtime": "^7.20.7", + "aria-query": "^5.1.3", + "array-includes": "^3.1.6", + "array.prototype.flatmap": "^1.3.1", + "ast-types-flow": "^0.0.7", + "axe-core": "^4.6.2", + "axobject-query": "^3.1.1", + "damerau-levenshtein": "^1.0.8", + "emoji-regex": "^9.2.2", + "has": "^1.0.3", + "jsx-ast-utils": "^3.3.3", + "language-tags": "=1.0.5", + "minimatch": "^3.1.2", + "object.entries": "^1.1.6", + "object.fromentries": "^2.0.6", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=4.0" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + } + }, + "node_modules/eslint-plugin-jsx-a11y/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-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.4", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", + "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", + "dependencies": { + "is-core-module": "^2.9.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/caniuse-lite": { - "version": "1.0.30001594", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001594.tgz", - "integrity": "sha512-VblSX6nYqyJVs8DKFMldE2IVCJjZ225LW00ydtUWwh5hk9IfkTOffO6r8gJNsH0qqqeAF8KrbMYA2VEwTlGW5g==", - "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/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/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, + "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": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" }, "engines": { - "node": ">=10" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://opencollective.com/eslint" } }, - "node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "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/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==", + "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==", + "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/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/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, "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" + "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": ">= 8.10.0" + "node": ">=10" }, "funding": { - "url": "https://paulmillr.com/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.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" }, - "optionalDependencies": { - "fsevents": "~2.3.2" + "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==" + }, + "node_modules/fast-glob": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", + "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" } }, - "node_modules/chokidar/node_modules/glob-parent": { + "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" }, @@ -1184,131 +3646,218 @@ "node": ">= 6" } }, - "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/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/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/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/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==", + "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==", + "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==", + "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.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==" + }, + "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/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "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==", "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==" + }, + "node_modules/function.prototype.name": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", + "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", "dependencies": { - "color-name": "~1.1.4" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" }, "engines": { - "node": ">=7.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "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/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/commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "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" + "node": ">=6.9.0" } }, - "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==", + "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, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, "engines": { - "node": ">= 8" + "node": "6.* || 8.* || >= 10.*" } }, - "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==", - "dev": true, - "bin": { - "cssesc": "bin/cssesc" + "node_modules/get-intrinsic": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", + "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3" }, - "engines": { - "node": ">=4" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "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==", + "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": { - "ms": "2.1.2" - }, "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "node": ">=8.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/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, - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" - }, "engines": { - "node": ">= 0.4" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "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, + "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": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" }, "engines": { "node": ">= 0.4" @@ -1317,129 +3866,72 @@ "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/get-tsconfig": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.0.tgz", + "integrity": "sha512-pmjiZ7xtB8URYm74PlGJozDNyhvsVLUcpBa8DZBG3bWHwaHa9bPiRpiSfovw+fjhwONSCWKRyk+JQHEGZmMrzw==", + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" } }, - "node_modules/didyoumean": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", - "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", - "dev": true - }, - "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, + "node_modules/glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", "dependencies": { - "path-type": "^4.0.0" + "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": ">=8" + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/dlv": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", - "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", - "dev": true - }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, + "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": { - "esutils": "^2.0.2" + "is-glob": "^4.0.3" }, "engines": { - "node": ">=6.0.0" + "node": ">=10.13.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.692", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.692.tgz", - "integrity": "sha512-d5rZRka9n2Y3MkWRN74IoAsxR0HK3yaAt7T50e3iT9VZmCCQDT3geXUO5ZRMhDToa1pkCeQXuNo+0g+NfDOVPA==", - "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/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/enhanced-resolve": { - "version": "5.15.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.1.tgz", - "integrity": "sha512-3d3JRbwsCLJsYgvb6NuWEG44jjPSOMuS73L/6+7BZuoKm3W+qXnSoIYVHi8dG7Qcg4inAY4jbzkZ7MnskePeDg==", - "dev": true, + "node_modules/globals": { + "version": "13.21.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.21.0.tgz", + "integrity": "sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==", "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" + "type-fest": "^0.20.2" }, "engines": { - "node": ">=10.13.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/es-abstract": { - "version": "1.22.5", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.5.tgz", - "integrity": "sha512-oW69R+4q2wG+Hc3KZePPZxOiisRIqfKBVo/HLx94QcJeWGU/8sZhCvc829rd1kS366vlJbzBfXf9yWwf0+Ko7w==", - "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", - "es-define-property": "^1.0.0", - "es-errors": "^1.3.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.1", - "internal-slot": "^1.0.7", - "is-array-buffer": "^3.0.4", - "is-callable": "^1.2.7", - "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.0", - "safe-regex-test": "^1.0.3", - "string.prototype.trim": "^1.2.8", - "string.prototype.trimend": "^1.0.7", - "string.prototype.trimstart": "^1.0.7", - "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.5", - "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.14" + "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" @@ -1448,724 +3940,557 @@ "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==", - "dev": true - }, - "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, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dependencies": { - "get-intrinsic": "^1.2.4" + "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.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": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/es-iterator-helpers": { - "version": "1.0.17", - "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.17.tgz", - "integrity": "sha512-lh7BsUqelv4KUbR5a/ZTaGGIMLCjPGPqJ6q+Oq24YP0RdyptX1uzm4vvaqzk7Zx3bpl/76YLTTDj9L7uYQ92oQ==", - "dev": true, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", "dependencies": { - "asynciterator.prototype": "^1.0.0", - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.22.4", - "es-errors": "^1.3.0", - "es-set-tostringtag": "^2.0.2", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "globalthis": "^1.0.3", - "has-property-descriptors": "^1.0.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.7", - "iterator.prototype": "^1.1.2", - "safe-array-concat": "^1.1.0" + "get-intrinsic": "^1.1.3" }, - "engines": { - "node": ">= 0.4" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "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, + "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/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "dependencies": { - "get-intrinsic": "^1.2.4", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.1" + "function-bind": "^1.1.1" }, "engines": { - "node": ">= 0.4" + "node": ">= 0.4.0" } }, - "node_modules/es-shim-unscopables": { + "node_modules/has-bigints": { "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" + "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": "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/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, + "node_modules/has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" + "get-intrinsic": "^1.1.1" }, "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, + "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": ">=6" + "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, + "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": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "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, + "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": { - "@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" + "has-symbols": "^1.0.2" }, "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/eslint-config-next": { - "version": "14.1.2", - "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-14.1.2.tgz", - "integrity": "sha512-g46mlgWmHoWhHuDbaQS8PLNQtBkVkiQMnVLhFcqnPSXN2I+R4Obom3ihCIQuNLbjVUgiFFHqmEwwtDuWv1wYKA==", + "node_modules/html-encoding-sniffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", + "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", "dev": true, "dependencies": { - "@next/eslint-plugin-next": "14.1.2", - "@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" + "whatwg-encoding": "^2.0.0" }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "engines": { + "node": ">=12" } }, - "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/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/http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", "dev": true, "dependencies": { - "debug": "^3.2.7", - "is-core-module": "^2.13.0", - "resolve": "^1.22.4" + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" } }, - "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/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==", "dev": true, "dependencies": { - "ms": "^2.1.1" + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" } }, - "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/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, - "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": ">=10.17.0" } }, - "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/hyphenate-style-name": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/hyphenate-style-name/-/hyphenate-style-name-1.0.4.tgz", + "integrity": "sha512-ygGZLjmXfPHj+ZWh6LwbC37l43MhfztxetbFCoYTM2VjkIUpeHgSNn7QIyVFj7YQ1Wl9Cbw5sholVJPzWvC2MQ==" + }, + "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==", "dev": true, "dependencies": { - "debug": "^3.2.7" + "safer-buffer": ">= 2.1.2 < 3.0.0" }, "engines": { - "node": ">=4" - }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - } + "node": ">=0.10.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==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" + "node_modules/ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "engines": { + "node": ">= 4" } }, - "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, + "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": { - "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" + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" }, "engines": { - "node": ">=4" + "node": ">=6" }, - "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "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/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": { - "ms": "^2.1.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/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" - }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "engines": { - "node": ">=0.10.0" + "node": ">=0.8.19" } }, - "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/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==", "dev": true, - "bin": { - "semver": "bin/semver.js" + "engines": { + "node": ">=8" } }, - "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/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/eslint-plugin-react": { - "version": "7.34.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.34.0.tgz", - "integrity": "sha512-MeVXdReleBTdkz/bvcQMSnCXGi+c9kvy51IpinjnJgutl3YTHWsDdke7Z1ufZpGfDG8xduBDKyjtB9JH1eBKIQ==", - "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/internal-slot": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", + "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", "dependencies": { - "array-includes": "^3.1.7", - "array.prototype.findlast": "^1.2.4", - "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.17", - "estraverse": "^5.3.0", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "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" + "get-intrinsic": "^1.2.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" }, "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + "node": ">= 0.4" } }, - "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==", + "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==", "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, - "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/ljharb" } }, - "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, + "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": { - "esutils": "^2.0.2" + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "is-typed-array": "^1.1.10" }, - "engines": { - "node": ">=0.10.0" + "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==", - "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-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": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" + "has-tostringtag": "^1.0.0" }, - "bin": { - "resolve": "bin/resolve" + "engines": { + "node": ">= 0.4" }, "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/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/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, + "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": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" }, "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/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, + "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": "^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/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, + "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==", "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" + "has": "^1.0.3" }, "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==", - "dev": 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==", "dependencies": { - "estraverse": "^5.1.0" + "has-tostringtag": "^1.0.0" }, "engines": { - "node": ">=0.10" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "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, + "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": { - "estraverse": "^5.2.0" + "call-bind": "^1.0.2" }, - "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/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": ">=4.0" + "node": ">=8" } }, - "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/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": ">=0.10.0" + "node": ">=6" } }, - "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, + "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": { - "@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-tostringtag": "^1.0.0" }, "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==", - "dev": true, + "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-glob": "^4.0.1" + "is-extglob": "^2.1.1" }, "engines": { - "node": ">= 6" + "node": ">=0.10.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/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.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/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/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" - }, + "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": "^10.12.0 || >=12.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "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" - }, + "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": ">=8" + "node": ">=0.12.0" } - }, - "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, + }, + "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": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" + "has-tostringtag": "^1.0.0" }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "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" - }, + "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": "^10.12.0 || >=12.0.0" + "node": ">=8" } }, - "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-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==", "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, + "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": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" + "call-bind": "^1.0.2", + "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/fraction.js": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", - "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", - "dev": true, - "engines": { - "node": "*" - }, + "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": { - "type": "patreon", - "url": "https://github.com/sponsors/rawify" + "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/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/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/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-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/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "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, + "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": { - "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" @@ -2174,26 +4499,26 @@ "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, + "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/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, + "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": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" + "which-typed-array": "^1.1.11" }, "engines": { "node": ">= 0.4" @@ -2202,701 +4527,1002 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/get-symbol-description": { + "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/get-symbol-description/-/get-symbol-description-1.0.2.tgz", - "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", - "dev": true, + "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.5", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4" - }, - "engines": { - "node": ">= 0.4" + "call-bind": "^1.0.2" }, "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, + "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": { - "resolve-pkg-maps": "^1.0.0" + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" }, "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/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.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", "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": ">=8" } }, - "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/istanbul-lib-instrument": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.1.tgz", + "integrity": "sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA==", "dev": true, "dependencies": { - "is-glob": "^4.0.3" + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^7.5.4" }, "engines": { - "node": ">=10.13.0" + "node": ">=10" } }, - "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/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": { - "balanced-match": "^1.0.0" + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" } }, - "node_modules/glob/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/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": { - "brace-expansion": "^2.0.1" + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" }, "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=10" } }, - "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/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": { - "type-fest": "^0.20.2" + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" }, "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, + "node_modules/iterator.prototype": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.0.tgz", + "integrity": "sha512-rjuhAk1AJ1fssphHD0IFV6TWL40CwRZ53FrztKx43yk2v6rguBYsY4Bj1VU4HmoMmKwZUlx7mfnhDf9cOp4YTw==", "dependencies": { - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "define-properties": "^1.1.4", + "get-intrinsic": "^1.1.3", + "has-symbols": "^1.0.3", + "has-tostringtag": "^1.0.0", + "reflect.getprototypeof": "^1.0.3" } }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "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": { - "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" + "@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": ">=10" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } } }, - "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "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": { - "get-intrinsic": "^1.1.3" + "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/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==", + "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-circus/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/sponsors/ljharb" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "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/jest-circus/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": ">=8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "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==", + "node_modules/jest-circus/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/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": { - "es-define-property": "^1.0.0" + "@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" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "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/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/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": ">= 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/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/jest-config/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": ">= 0.4" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "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/jest-config/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": { - "has-symbols": "^1.0.3" + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.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/hasown": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.1.tgz", - "integrity": "sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==", + "node_modules/jest-config/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/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": { - "function-bind": "^1.1.2" + "chalk": "^4.0.0", + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" }, "engines": { - "node": ">= 0.4" + "node": "^14.15.0 || ^16.10.0 || >=18.0.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==", + "node_modules/jest-diff/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": ">= 4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "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/jest-diff/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": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" }, "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "node_modules/jest-diff/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/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": ">=0.8.19" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "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==", + "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": { - "once": "^1.3.0", - "wrappy": "1" + "@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/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/jest-each/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/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/jest-each/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": { - "es-errors": "^1.3.0", - "hasown": "^2.0.0", - "side-channel": "^1.0.4" + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" }, "engines": { - "node": ">= 0.4" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "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/jest-each/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/jest-environment-jsdom": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-29.7.0.tgz", + "integrity": "sha512-k9iQbsf9OyOfdzWH8HDmrRT0gSIcX+FLNW7IQq94tFX0gynPwqDTW0Ho6iMVNjGz/nb+l/vW3dWM2bbLLpkbXA==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1" + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/jsdom": "^20.0.0", + "@types/node": "*", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0", + "jsdom": "^20.0.0" }, "engines": { - "node": ">= 0.4" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "canvas": "^2.5.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": 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==", + "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": { - "has-tostringtag": "^1.0.0" + "@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.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "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/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, - "dependencies": { - "has-bigints": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "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==", + "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": { - "binary-extensions": "^2.0.0" + "@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": ">=8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" } }, - "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==", + "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": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.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-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-leak-detector/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": ">= 0.4" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "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-leak-detector/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": { - "hasown": "^2.0.0" + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "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-leak-detector/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/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-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "node_modules/jest-matcher-utils/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": ">=0.10.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "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-matcher-utils/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": { - "call-bind": "^1.0.2" + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.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-matcher-utils/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/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-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-message-util/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, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, "engines": { - "node": ">= 0.4" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "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-message-util/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": { - "is-extglob": "^2.1.1" + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" }, "engines": { - "node": ">=0.10.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.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==", + "node_modules/jest-message-util/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/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, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "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/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-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-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-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": ">=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-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-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-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": ">=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-runner": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", + "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "@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": ">= 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.2", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", - "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", + "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, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=8" } }, - "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-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.7" + "@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": ">= 0.4" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-snapshot/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/sponsors/ljharb" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "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-snapshot/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": { - "has-tostringtag": "^1.0.0" + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.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-snapshot/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/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": { - "has-symbols": "^1.0.2" + "@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" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "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-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": { - "which-typed-array": "^1.1.14" + "@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": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "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==", + "node_modules/jest-validate/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/sponsors/ljharb" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "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-validate/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true, - "dependencies": { - "call-bind": "^1.0.2" + "engines": { + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-weakset": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", - "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", + "node_modules/jest-validate/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": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "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==", + "node_modules/jest-validate/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/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-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": { - "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" + "@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/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": { + "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": { - "@isaacs/cliui": "^8.0.2" + "@types/node": "*", + "jest-util": "^29.7.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" }, "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "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==", + "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, - "bin": { - "jiti": "bin/jiti.js" + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, "node_modules/js-tokens": { @@ -2908,7 +5534,6 @@ "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" }, @@ -2916,29 +5541,83 @@ "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==", + "node_modules/jsdom": { + "version": "20.0.3", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-20.0.3.tgz", + "integrity": "sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==", + "dev": true, + "dependencies": { + "abab": "^2.0.6", + "acorn": "^8.8.1", + "acorn-globals": "^7.0.0", + "cssom": "^0.5.0", + "cssstyle": "^2.3.0", + "data-urls": "^3.0.2", + "decimal.js": "^10.4.2", + "domexception": "^4.0.0", + "escodegen": "^2.0.0", + "form-data": "^4.0.0", + "html-encoding-sniffer": "^3.0.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.1", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.2", + "parse5": "^7.1.1", + "saxes": "^6.0.0", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.1.2", + "w3c-xmlserializer": "^4.0.0", + "webidl-conversions": "^7.0.0", + "whatwg-encoding": "^2.0.0", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^11.0.0", + "ws": "^8.11.0", + "xml-name-validator": "^4.0.0" + }, + "engines": { + "node": ">=14" + }, + "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==", + "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/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 + "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==", - "dev": true + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==" }, "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" }, @@ -2950,7 +5629,6 @@ "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", @@ -2961,38 +5639,41 @@ "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==", + "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, - "dependencies": { - "json-buffer": "3.0.1" + "engines": { + "node": ">=6" } }, "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 + "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==", - "dev": true, + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz", + "integrity": "sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==", "dependencies": { - "language-subtag-registry": "^0.3.20" - }, + "language-subtag-registry": "~0.3.2" + } + }, + "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": ">=0.10" + "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" @@ -3001,15 +5682,6 @@ "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==", - "dev": true, - "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", @@ -3020,7 +5692,6 @@ "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" }, @@ -3031,11 +5702,15 @@ "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.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 + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" }, "node_modules/loose-envify": { "version": "1.4.0", @@ -3049,19 +5724,67 @@ } }, "node_modules/lru-cache": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", - "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", + "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/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==", + "dev": true, + "bin": { + "lz-string": "bin/bin.js" + } + }, + "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": "14 || >=16.14" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, + "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/matchmediaquery": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/matchmediaquery/-/matchmediaquery-0.3.1.tgz", + "integrity": "sha512-Hlk20WQHRIm9EE9luN1kjRjYXAQToHOIAHPJn9buxBwuhfTHoKUcX+lXBbxc85DVQfXYbEQ4HcwQdd128E3qHQ==", + "dependencies": { + "css-mediaquery": "^0.1.2" + } + }, + "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" } @@ -3070,20 +5793,57 @@ "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-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "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==", "dev": true, - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, "engines": { - "node": ">=8.6" + "node": ">=4" } }, "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" }, @@ -3095,36 +5855,14 @@ "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.0.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", - "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", - "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/mz": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", - "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", - "dev": true, - "dependencies": { - "any-promise": "^1.0.0", - "object-assign": "^4.0.1", - "thenify-all": "^1.0.0" - } + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "node_modules/nanoid": { "version": "3.3.7", @@ -3146,21 +5884,21 @@ "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 + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==" }, "node_modules/next": { - "version": "14.1.2", - "resolved": "https://registry.npmjs.org/next/-/next-14.1.2.tgz", - "integrity": "sha512-p4RfNmopqkzRP1uUyBJnHii+qMg71f2udWhTTZopBB8b3T5QXNzn7yO+LCYHPWZG2kAvEn4l4neyJHqkXvo2wg==", + "version": "14.0.4", + "resolved": "https://registry.npmjs.org/next/-/next-14.0.4.tgz", + "integrity": "sha512-qbwypnM7327SadwFtxXnQdGiKpkuhaRLE2uq62/nRul9cj9KhQ5LhHmlziTNqUidZotw/Q1I9OjirBROdUJNgA==", "dependencies": { - "@next/env": "14.1.2", + "@next/env": "14.0.4", "@swc/helpers": "0.5.2", "busboy": "1.6.0", - "caniuse-lite": "^1.0.30001579", + "caniuse-lite": "^1.0.30001406", "graceful-fs": "^4.2.11", "postcss": "8.4.31", - "styled-jsx": "5.1.1" + "styled-jsx": "5.1.1", + "watchpack": "2.4.0" }, "bin": { "next": "dist/bin/next" @@ -3169,15 +5907,15 @@ "node": ">=18.17.0" }, "optionalDependencies": { - "@next/swc-darwin-arm64": "14.1.2", - "@next/swc-darwin-x64": "14.1.2", - "@next/swc-linux-arm64-gnu": "14.1.2", - "@next/swc-linux-arm64-musl": "14.1.2", - "@next/swc-linux-x64-gnu": "14.1.2", - "@next/swc-linux-x64-musl": "14.1.2", - "@next/swc-win32-arm64-msvc": "14.1.2", - "@next/swc-win32-ia32-msvc": "14.1.2", - "@next/swc-win32-x64-msvc": "14.1.2" + "@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", @@ -3194,37 +5932,16 @@ } } }, - "node_modules/next/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/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==", + "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": { @@ -3236,38 +5953,52 @@ "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==", + "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": ">=0.10.0" + "node": ">=8" } }, + "node_modules/nwsapi": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.7.tgz", + "integrity": "sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==", + "dev": 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-hash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", - "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", - "dev": true, - "engines": { - "node": ">= 6" + "node_modules/object-inspect": { + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "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==", + "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==", "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -3276,19 +6007,17 @@ "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, + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", "dependencies": { - "call-bind": "^1.0.5", - "define-properties": "^1.2.1", + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", "has-symbols": "^1.0.3", "object-keys": "^1.1.1" }, @@ -3300,28 +6029,26 @@ } }, "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, + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.6.tgz", + "integrity": "sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==", "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" }, "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, + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.6.tgz", + "integrity": "sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==", "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" }, "engines": { "node": ">= 0.4" @@ -3331,40 +6058,36 @@ } }, "node_modules/object.groupby": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.2.tgz", - "integrity": "sha512-bzBq58S+x+uo0VjurFT0UktpKHOZmv4/xePiOA1nbB9pMqpGK7rUPNgf+1YC+7mE+0HzhTMqNUuCqvKhj6FnBw==", - "dev": true, + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.0.tgz", + "integrity": "sha512-70MWG6NfRH9GnbZOikuhPPYzpUpof9iW2J9E4dW7FXTqPNb6rllE6u39SKwwiNh8lCwX3DDb5OgcKGiEBrTTyw==", "dependencies": { - "array.prototype.filter": "^1.0.3", - "call-bind": "^1.0.5", - "define-properties": "^1.2.1", - "es-abstract": "^1.22.3", - "es-errors": "^1.0.0" + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.21.2", + "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, + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.2.tgz", + "integrity": "sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==", "dependencies": { - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" }, "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, + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", + "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==", "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" }, "engines": { "node": ">= 0.4" @@ -3377,16 +6100,29 @@ "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.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", @@ -3403,7 +6139,6 @@ "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" }, @@ -3418,7 +6153,6 @@ "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" }, @@ -3429,11 +6163,19 @@ "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" }, @@ -3441,11 +6183,40 @@ "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/parse5": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "dev": true, + "dependencies": { + "entities": "^4.4.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, "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" } @@ -3454,7 +6225,6 @@ "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" } @@ -3463,7 +6233,6 @@ "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" } @@ -3471,30 +6240,12 @@ "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.10.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", - "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", - "dev": true, - "dependencies": { - "lru-cache": "^9.1.1 || ^10.0.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, "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" } @@ -3508,7 +6259,6 @@ "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" }, @@ -3516,15 +6266,6 @@ "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==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/pirates": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", @@ -3534,198 +6275,215 @@ "node": ">= 6" } }, - "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==", + "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": ">= 0.4" + "node": ">=8" } }, - "node_modules/postcss": { - "version": "8.4.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.35.tgz", - "integrity": "sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==", + "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, - "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" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" }, "engines": { - "node": "^10 || ^12 || >=14" + "node": ">=8" } }, - "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==", + "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": { - "postcss-value-parser": "^4.0.0", - "read-cache": "^1.0.0", - "resolve": "^1.1.7" + "p-locate": "^4.1.0" }, "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "postcss": "^8.0.0" + "node": ">=8" } }, - "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==", + "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": { - "camelcase-css": "^2.0.1" + "p-try": "^2.0.0" }, "engines": { - "node": "^12 || ^14 || >= 16" + "node": ">=6" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - "peerDependencies": { - "postcss": "^8.4.21" + "url": "https://github.com/sponsors/sindresorhus" } }, - "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==", + "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/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": { - "lilconfig": "^3.0.0", - "yaml": "^2.3.4" + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" }, "engines": { - "node": ">= 14" - }, - "peerDependencies": { - "postcss": ">=8.0.9", - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "postcss": { - "optional": true - }, - "ts-node": { - "optional": true - } + "node": "^10 || ^12 || >=14" } }, - "node_modules/postcss-load-config/node_modules/lilconfig": { + "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/prettier": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.1.tgz", - "integrity": "sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ==", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.1.1.tgz", + "integrity": "sha512-22UbSzg8luF4UuZtzgiUOfcGM8s4tjBv6dJRT7j275NXsy2jb4aJa4NNveul5x4eqlF1wuhuR2RElK71RvmVaw==", "dev": true, + "bin": { + "prettier": "bin/prettier.cjs" + }, "engines": { "node": ">=14" }, "funding": { - "url": "https://github.com/sponsors/antonk52" + "url": "https://github.com/prettier/prettier?sponsor=1" } }, - "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==", + "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==", "dev": true, "dependencies": { - "postcss-selector-parser": "^6.0.11" + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" }, "engines": { - "node": ">=12.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - "peerDependencies": { - "postcss": "^8.2.14" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/postcss-selector-parser": { - "version": "6.0.15", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.15.tgz", - "integrity": "sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw==", + "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, - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, "engines": { - "node": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "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/pretty-format/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==", "dev": true }, - "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==", + "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": ">= 0.8.0" + "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/psl": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", + "dev": true + }, "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, + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", "engines": { "node": ">=6" } }, + "node_modules/pure-rand": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.4.tgz", + "integrity": "sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ] + }, + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "dev": true + }, "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", @@ -3767,41 +6525,47 @@ "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 + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, - "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==", - "dev": true, + "node_modules/react-responsive": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/react-responsive/-/react-responsive-9.0.2.tgz", + "integrity": "sha512-+4CCab7z8G8glgJoRjAwocsgsv6VA2w7JPxFWHRc7kvz8mec1/K5LutNC2MG28Mn8mu6+bu04XZxHv5gyfT7xQ==", "dependencies": { - "pify": "^2.3.0" + "hyphenate-style-name": "^1.0.0", + "matchmediaquery": "^0.3.0", + "prop-types": "^15.6.1", + "shallow-equal": "^1.2.1" + }, + "engines": { + "node": ">=0.10" + }, + "peerDependencies": { + "react": ">=16.8.0" } }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "node_modules/redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", "dev": true, "dependencies": { - "picomatch": "^2.2.1" + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" }, "engines": { - "node": ">=8.10.0" + "node": ">=8" } }, "node_modules/reflect.getprototypeof": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.5.tgz", - "integrity": "sha512-62wgfC8dJWrmxv44CA36pLDnP6KKl3Vhxb7PL+8+qrrFMMoJij4vgiMP8zV4O8+CBMXY1mHxI5fITGHXFHVmQQ==", - "dev": true, + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.3.tgz", + "integrity": "sha512-TTAOZpkJ2YLxl7mVHWrNo3iDMEkYlva/kgFcXndqMgbo/AZUmmavEkdXV+hXtE4P8xdyEKRzalaFqZVuwIk/Nw==", "dependencies": { - "call-bind": "^1.0.5", - "define-properties": "^1.2.1", - "es-abstract": "^1.22.3", - "es-errors": "^1.0.0", - "get-intrinsic": "^1.2.3", + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "get-intrinsic": "^1.1.1", "globalthis": "^1.0.3", "which-builtin-type": "^1.1.3" }, @@ -3813,21 +6577,18 @@ } }, "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 + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", + "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==" }, "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, + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz", + "integrity": "sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==", "dependencies": { - "call-bind": "^1.0.6", - "define-properties": "^1.2.1", - "es-errors": "^1.3.0", - "set-function-name": "^2.0.1" + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "functions-have-names": "^1.2.3" }, "engines": { "node": ">= 0.4" @@ -3836,11 +6597,25 @@ "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==", + "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/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "dev": true + }, + "node_modules/resolve": { + "version": "1.22.4", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz", + "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==", "dependencies": { "is-core-module": "^2.13.0", "path-parse": "^1.0.7", @@ -3853,11 +6628,31 @@ "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" } @@ -3866,16 +6661,23 @@ "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" @@ -3885,7 +6687,6 @@ "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" }, @@ -3896,31 +6697,10 @@ "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==", - "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", @@ -3940,13 +6720,12 @@ } }, "node_modules/safe-array-concat": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.0.tgz", - "integrity": "sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg==", - "dev": true, + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.0.tgz", + "integrity": "sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ==", "dependencies": { - "call-bind": "^1.0.5", - "get-intrinsic": "^1.2.2", + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", "has-symbols": "^1.0.3", "isarray": "^2.0.5" }, @@ -3958,22 +6737,36 @@ } }, "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, + "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.6", - "es-errors": "^1.3.0", + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", "is-regex": "^1.1.4" }, - "engines": { - "node": ">= 0.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==", + "dev": true + }, + "node_modules/saxes": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", + "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", + "dev": true, + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=v12.22.7" + } + }, "node_modules/scheduler": { "version": "0.23.0", "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", @@ -3983,10 +6776,9 @@ } }, "node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "dev": true, + "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" }, @@ -3997,55 +6789,15 @@ "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==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/set-function-length": { + "node_modules/shallow-equal": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.1.tgz", - "integrity": "sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g==", - "dev": true, - "dependencies": { - "define-data-property": "^1.1.2", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.3", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.1" - }, - "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" - } + "resolved": "https://registry.npmjs.org/shallow-equal/-/shallow-equal-1.2.1.tgz", + "integrity": "sha512-S4vJDjHHMBaiZuT9NPb616CSmLf618jawtv3sufLl6ivK8WocjAo58cXwbRV1cgqxH0Qbv+iUt6m05eqEa2IRA==" }, "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" }, @@ -4057,50 +6809,52 @@ "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, + "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.7", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "object-inspect": "^1.13.1" - }, - "engines": { - "node": ">= 0.4" + "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": "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" - } + "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-js": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", @@ -4109,6 +6863,55 @@ "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/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==", + "dev": true, + "dependencies": { + "internal-slot": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/streamsearch": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", @@ -4117,25 +6920,20 @@ "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==", + "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": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=10" } }, - "node_modules/string-width-cjs": { - "name": "string-width", + "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==", @@ -4149,53 +6947,24 @@ "node": ">=8" } }, - "node_modules/string-width-cjs/node_modules/emoji-regex": { + "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==", "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.10", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.10.tgz", - "integrity": "sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==", - "dev": true, + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz", + "integrity": "sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==", "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "get-intrinsic": "^1.1.3", "has-symbols": "^1.0.3", - "internal-slot": "^1.0.5", - "regexp.prototype.flags": "^1.5.0", - "set-function-name": "^2.0.0", + "internal-slot": "^1.0.3", + "regexp.prototype.flags": "^1.4.3", "side-channel": "^1.0.4" }, "funding": { @@ -4203,14 +6972,13 @@ } }, "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, + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz", + "integrity": "sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==", "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" }, "engines": { "node": ">= 0.4" @@ -4220,28 +6988,26 @@ } }, "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, + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", + "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" }, "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, + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", + "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -4251,7 +7017,6 @@ "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" }, @@ -4259,33 +7024,39 @@ "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" - }, + "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/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": ">=8" + "node": ">=6" } }, - "node_modules/strip-bom": { + "node_modules/strip-indent": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", "dev": true, + "dependencies": { + "min-indent": "^1.0.0" + }, "engines": { - "node": ">=4" + "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==", - "dev": true, "engines": { "node": ">=8" }, @@ -4315,33 +7086,10 @@ } } }, - "node_modules/sucrase": { - "version": "3.35.0", - "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", - "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", - "dev": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.2", - "commander": "^4.0.0", - "glob": "^10.3.10", - "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": ">=16 || 14 >=14.17" - } - }, "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" }, @@ -4353,7 +7101,6 @@ "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" }, @@ -4361,114 +7108,107 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/tailwindcss": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.1.tgz", - "integrity": "sha512-qAYmXRfk3ENzuPBakNK0SRrUDipP8NQnEY6772uDhflcQz5EhRdD7JNZxyrFHVQNCwULPBn6FNPp9brpO7ctcA==", - "dev": 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.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/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==", + "dev": true }, "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/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==", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" + }, + "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/thenify": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", - "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "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==", "dependencies": { - "any-promise": "^1.0.0" + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.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==", + "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==", "dev": true, "dependencies": { - "thenify": ">= 3.1.0 < 4" + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" }, "engines": { - "node": ">=0.8" + "node": ">=6" } }, - "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==", + "node_modules/tr46": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", + "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", "dev": true, "dependencies": { - "is-number": "^7.0.0" + "punycode": "^2.1.1" }, "engines": { - "node": ">=8.0" + "node": ">=12" } }, "node_modules/ts-api-utils": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.2.1.tgz", - "integrity": "sha512-RIYA36cJn2WiH9Hy77hdF9r7oEwxAtB/TS9/S4Qd90Ap4z5FSiin5zEiTL44OII1Y3IIlEvxwxFUVgrHSZ/UpA==", - "dev": true, + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.2.tgz", + "integrity": "sha512-Cbu4nIqnEdd+THNEsBdkolnOXhg0I8XteoHaEKgvsxpsbWda4IsUut2c187HxywQCvveojow0Dgw/amxtSKVkQ==", "engines": { - "node": ">=16" + "node": ">=16.13.0" }, "peerDependencies": { "typescript": ">=4.2.0" } }, - "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==", - "dev": true - }, "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, + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz", + "integrity": "sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==", "dependencies": { "@types/json5": "^0.0.29", "json5": "^1.0.2", @@ -4485,7 +7225,6 @@ "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" }, @@ -4493,11 +7232,19 @@ "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" }, @@ -4506,30 +7253,27 @@ } }, "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, + "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.7", - "es-errors": "^1.3.0", - "is-typed-array": "^1.1.13" + "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.1", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", - "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", - "dev": true, + "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.7", + "call-bind": "^1.0.2", "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13" + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" }, "engines": { "node": ">= 0.4" @@ -4539,17 +7283,15 @@ } }, "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, + "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.7", - "call-bind": "^1.0.7", + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13" + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" }, "engines": { "node": ">= 0.4" @@ -4559,30 +7301,22 @@ } }, "node_modules/typed-array-length": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.5.tgz", - "integrity": "sha512-yMi0PlwuznKHxKmcpoOdeLwxBoVPkqZxd7q2FgMkmD3bNwvF5VW0+UlUQ1k1vmktTu4Yu13Q0RIxEP8+B+wloA==", - "dev": true, + "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.7", + "call-bind": "^1.0.2", "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" + "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, + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz", + "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -4591,11 +7325,21 @@ "node": ">=14.17" } }, + "node_modules/uid": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/uid/-/uid-2.0.2.tgz", + "integrity": "sha512-u3xV3X7uzvi5b1MncmZo3i2Aw222Zk1keqLA1YkHldREkAhAqi65wuPfe7lHx8H/Wzy+8CE7S7uS3jekIM5s8g==", + "dependencies": { + "@lukeed/csprng": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, "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", @@ -4606,16 +7350,19 @@ "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/universalify": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } }, "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==", + "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": [ { @@ -4646,22 +7393,114 @@ "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/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true + "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==", + "dev": true, + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "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/w3c-xmlserializer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz", + "integrity": "sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==", + "dev": true, + "dependencies": { + "xml-name-validator": "^4.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "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/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/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-encoding": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", + "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", + "dev": true, + "dependencies": { + "iconv-lite": "0.6.3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-mimetype": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", + "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-url": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", + "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", + "dev": true, + "dependencies": { + "tr46": "^3.0.0", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=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" }, @@ -4676,7 +7515,6 @@ "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", @@ -4692,7 +7530,6 @@ "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", @@ -4718,7 +7555,6 @@ "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", @@ -4730,16 +7566,15 @@ } }, "node_modules/which-typed-array": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.14.tgz", - "integrity": "sha512-VnXFiIW8yNn9kIHN88xvZ4yOWchftKDsRJ8fEPacX/wl1lOvBrhsJ/OeJCXq7B0AaijRuqgzSKalJoPk+D8MPg==", - "dev": true, + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz", + "integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==", "dependencies": { - "available-typed-arrays": "^1.0.6", - "call-bind": "^1.0.5", + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", "for-each": "^0.3.3", "gopd": "^1.0.1", - "has-tostringtag": "^1.0.1" + "has-tostringtag": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -4749,24 +7584,6 @@ } }, "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==", @@ -4783,94 +7600,105 @@ "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/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/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==", + "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": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" }, "engines": { - "node": ">=8" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "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==", + "node_modules/ws": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", + "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", "dev": true, "engines": { - "node": ">=12" + "node": ">=10.0.0" }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } } }, - "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==", + "node_modules/xml-name-validator": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", + "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", "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==", + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "dev": true + }, + "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, - "dependencies": { - "ansi-regex": "^6.0.1" - }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" + "node": ">=10" } }, - "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 + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, - "node_modules/yaml": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.0.tgz", - "integrity": "sha512-j9iR8g+/t0lArF4V6NE/QCfT+CO7iLqrXAHZbJdo+LfjqP1vR8Fg5bSiaq6Q2lOD1AUEVrEVIgABvBFYojJVYQ==", + "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, - "bin": { - "yaml": "bin.mjs" + "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": ">= 14" + "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" }, diff --git a/package.json b/package.json index b594256..12baf56 100644 --- a/package.json +++ b/package.json @@ -1,27 +1,41 @@ { - "name": "verifeye", - "version": "0.1.0", - "private": true, + "name": "2048-in-react", + "version": "0.2.0", + "homepage": "https://mateuszsokola.github.io/2048-in-react/", + "author": "Mateusz Sokola (https://mateu.sh/)", + "license": "MIT", "scripts": { "dev": "next dev", "build": "next build", "start": "next start", - "lint": "next lint" + "lint": "next lint", + "check-code": "prettier --check .", + "format": "prettier --write .", + "test": "jest --watch", + "test-coverage": "jest --coverage --verbose" }, "dependencies": { - "react": "^18", - "react-dom": "^18", - "next": "14.1.2" + "@types/node": "20.5.1", + "@types/react": "18.2.20", + "@types/react-dom": "18.2.7", + "eslint": "8.47.0", + "eslint-config-next": "14.0.4", + "lodash": "4.17.21", + "next": "14.0.4", + "react": "18.2.0", + "react-dom": "18.2.0", + "react-responsive": "9.0.2", + "typescript": "5.1.6", + "uid": "2.0.2" }, "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.1.2" + "@testing-library/jest-dom": "6.1.5", + "@testing-library/react": "14.1.2", + "@types/jest": "29.5.11", + "@types/lodash": "4.14.202", + "@typescript-eslint/typescript-estree": "6.15.0", + "jest": "29.7.0", + "jest-environment-jsdom": "29.7.0", + "prettier": "3.1.1" } } diff --git a/pages/_app.tsx b/pages/_app.tsx new file mode 100644 index 0000000..52b78a0 --- /dev/null +++ b/pages/_app.tsx @@ -0,0 +1,11 @@ +import type { AppProps } from "next/app"; +import GameProvider from "@/context/game-context"; +import "@/styles/globals.css"; + +export default function App({ Component, pageProps }: AppProps) { + return ( + + + + ); +} diff --git a/pages/_document.tsx b/pages/_document.tsx new file mode 100644 index 0000000..b2fff8b --- /dev/null +++ b/pages/_document.tsx @@ -0,0 +1,13 @@ +import { Html, Head, Main, NextScript } from "next/document"; + +export default function Document() { + return ( + + + +
+ + + + ); +} diff --git a/pages/index.tsx b/pages/index.tsx new file mode 100644 index 0000000..fd0d53f --- /dev/null +++ b/pages/index.tsx @@ -0,0 +1,76 @@ +import Head from "next/head"; +import Image from "next/image"; +import Board from "@/components/board"; +import Score from "@/components/score"; +import styles from "@/styles/index.module.css"; + +export default function Home() { + return ( +
+ + Play 2048 + + + + + + + +
+

2048

+ +
+
+ +
+
+

+ 🚀 Learn React 18 & Next.js +

+

+ Join my{" "} + + Udemy course + {" "} + and learn React & Next.js by creating your own 2048 game from scratch. +

+
+
+ +
Made with ❤️ by Matéush
+
+
+ ); +} diff --git a/postcss.config.js b/postcss.config.js deleted file mode 100644 index 12a703d..0000000 --- a/postcss.config.js +++ /dev/null @@ -1,6 +0,0 @@ -module.exports = { - plugins: { - tailwindcss: {}, - autoprefixer: {}, - }, -}; diff --git a/public/apple-touch-icon.png b/public/apple-touch-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..448c9c0bd8dd774810ccae185804453a08ce089d GIT binary patch literal 6957 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 TO@<%K1JG2}Rr&tZCggtsi{yA8 literal 0 HcmV?d00001 diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..22109e04a9f44bde18ec7b7a4b7410d0246521bc GIT binary patch literal 4286 zcmeI0u}T9$5QaxAZ4|*eSlRmm7M9V@SMU{VQ>5?}d;{?n1WA#?B1H-d3kAW#!e}&! z290>`cj4E~-Q@zpx`i3p?A^})&p$J}fvjc=?ypiYKJ9qfY|YFz+;B^_ zFn$f<2q!J!u7@9~i@DVw36{n#zAi#L=w1qYr#f#FwA?@S$6_fB4AP=j)up z&-xU9K1cfvmODrDz4%vq5%c#q+Oh8+)rjYPd=HIz|I|hJ=PnrXPDE_>yDHg+*KulwNh1` literal 0 HcmV?d00001 diff --git a/public/favicon16.png b/public/favicon16.png new file mode 100644 index 0000000000000000000000000000000000000000..5fd32d42bb6ce3a924a907bb83515ab146f56514 GIT binary patch literal 587 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!Lb6AYF9SoB8UsT^3j@P1pisjL z28L1t28LG&3=CE?7#PG0=Ijcz0ZL2@@Ck8!d(<8Y*}XmL@b;+fhx75@9?t!At?c8a ztZ$Fzf4rRc`9|Hx%Q>H}SAKmk^TUPYcPD*5-)#K;Wa;-O%YME+^5u5tx5tZqzTWrt zh|PzyQ9oX6`gE=Q+mj{VpRN7ze8bN-2fsgA{{88y@6Xn}J!1RmYVr4{D?i_C_;jW4 z+vA1r&xC)vR{7~##kU8uK3>dtd(`p&|Nr&t?^FX_$XpWS7i@RxuiC7=ia;)7lDE5y z;mzB!ML-UFiKnkC`*T)C4k3X%Gb0*+LiL_5jv*44bI;%8YcddEy^#4l=uTHg;E~u3 zJM{nmFWqLSxUgWp+VjMBJQF9}ap6)rxRzs5?t~+bzZe7$B(R!SIM_(^9TR?$GV9!w z_MIn-modN6syNec;;k*KgzO=jng`x1!$r$+bxCnv3z$4$r@w zD}MOf{^wry4{Kf>X9GG#wZt`|BqgyV)hf9t6-Y4{85kMs8kp)D7={>FSQ(mG8Cz-_ z7+4t?Xf(ZaM$wR)pOTqYiCaVD{lNb~4H|G8N-}d(i%Sx73()m|?15OaB+r~3sE5JR L)z4*}Q$iB}I*tUr literal 0 HcmV?d00001 diff --git a/public/favicon32.png b/public/favicon32.png new file mode 100644 index 0000000000000000000000000000000000000000..dbec88ba54bc94b6557b29d6488fcc4b6cac6cec GIT binary patch literal 1004 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7e6l0AZa85pY67#JE_7#My5g&JNk zFq9fFFuY1&V6d9Oz#v{QXIG#N0|R42fKQ0)+oSe4klouOHgAvEzB}pt>1y%k8?_(K zMZY`g_vu>sr|XsPPX&HBAOH5K!-w-ppKsKEx>ES=gvZ-s&flM}`}^bhpRe~nTuAx( z_VAx?kNC0`}_0F zm)jkGf4%#7IsfB@)W1Jpzdd60{&dj4-=BZIJO1tQ!rxzReS5s*_vf4MPI$dNV*TZI z+sBI;U++zNchdLWakt-}uYY^I`0X*rAI~@be6#=i^Yy>ppZNXh>fi5AzufM8d(`&R zwTiC~W_-Or_4ns%f4)8XcscL;(^bDep8s;I^~Z}%pKmsOf4cnrnedO7vOb(o{QL9O zmpi>bUhVk%>;3P~H~#*5`|t1fpRf1*e0$`}?e_O)qyBuk^Y8DEZx83bJLUK5{i#1+ z@BaRH>HV3o4`-u4UdsOQa_jF;KyJjBJKcZ3Kl}Ce=+D=C-W_-Scq!-8)sheA;@+PL zeSbFM!-eGk|NryzO}-3_B=(XZzhDOTlyg6tzxh7XnFthOO!9VjsrT4l_!KPf>Fdh= zoRyJ7NVnyq2vDBU$kW9!#Nu>vLPAPXTH}&|JM@)ynLQtW57iq8%EqJ6^rwd?76%^-^-S#;jSL zGooiiL`4=KxO*Tqd3ARB`UekQJbClz)w6esN~<5feA>IA>F)9Hd;O>7S125a)Hl$u zXt54C7-M)wFt5pDM~TZ4mi2WZB|bSZHBL#BYKyu&Rs~9lhcLDWRJAp^rG;&C^2>{> zYb;6(EcDEb^xMgDr=`nFZr-XaKH-fYr1%mTu3Rhha9he{rLePcvam?dhK5fEIaW9d z&KA*BnDK@)O{OWbKjE3`l)sEW-0a*r!!9=f15~xdHKHUXu_VKYh^7+6>tnpqiJY8x0>85n3Zy>v#=kei>9nO2EgL*)Iy|3D2Ia2rZ8b5n~;5_1dC b^;lS$m_jVMo2L8^sE5JR)z4*}Q$iB}7l8^L literal 0 HcmV?d00001 diff --git a/public/logo512.png b/public/logo512.png new file mode 100644 index 0000000000000000000000000000000000000000..894f9c449b63366be1c03a970178cc4d64a075e4 GIT binary patch literal 20874 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 literal 0 HcmV?d00001 diff --git a/public/next.svg b/public/next.svg deleted file mode 100644 index 5174b28..0000000 --- a/public/next.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/public/social-github.svg b/public/social-github.svg new file mode 100644 index 0000000..f71c0fd --- /dev/null +++ b/public/social-github.svg @@ -0,0 +1 @@ + diff --git a/public/social-twitter.svg b/public/social-twitter.svg new file mode 100644 index 0000000..8bfd5a2 --- /dev/null +++ b/public/social-twitter.svg @@ -0,0 +1 @@ + diff --git a/public/vercel.svg b/public/vercel.svg deleted file mode 100644 index d2f8422..0000000 --- a/public/vercel.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/reducers/game-reducer.ts b/reducers/game-reducer.ts new file mode 100644 index 0000000..5c23edf --- /dev/null +++ b/reducers/game-reducer.ts @@ -0,0 +1,293 @@ +import { flattenDeep, isEqual, isNil } from "lodash"; +import { uid } from "uid"; +import { tileCountPerDimension } from "@/constants"; +import { Tile, TileMap } from "@/models/tile"; + +type State = { + board: string[][]; + tiles: TileMap; + tilesByIds: string[]; + hasChanged: boolean; + score: number; +}; +type Action = + | { type: "create_tile"; tile: Tile } + | { type: "clean_up" } + | { type: "move_up" } + | { type: "move_down" } + | { type: "move_left" } + | { type: "move_right" }; + +function createBoard() { + const board: string[][] = []; + + for (let i = 0; i < tileCountPerDimension; i += 1) { + board[i] = new Array(tileCountPerDimension).fill(undefined); + } + + return board; +} + +export const initialState: State = { + board: createBoard(), + tiles: {}, + tilesByIds: [], + hasChanged: false, + score: 0, +}; + +export default function gameReducer( + state: State = initialState, + action: Action, +) { + switch (action.type) { + case "clean_up": { + const flattenBoard = flattenDeep(state.board); + const newTiles: TileMap = flattenBoard.reduce( + (result, tileId: string) => { + if (isNil(tileId)) { + return result; + } + + return { + ...result, + [tileId]: state.tiles[tileId], + }; + }, + {}, + ); + + return { + ...state, + tiles: newTiles, + tilesByIds: Object.keys(newTiles), + hasChanged: false, + }; + } + case "create_tile": { + const tileId = uid(); + const [x, y] = action.tile.position; + const newBoard = JSON.parse(JSON.stringify(state.board)); + newBoard[y][x] = tileId; + + return { + ...state, + board: newBoard, + tiles: { + ...state.tiles, + [tileId]: { + id: tileId, + ...action.tile, + }, + }, + tilesByIds: [...state.tilesByIds, tileId], + }; + } + case "move_up": { + const newBoard = createBoard(); + const newTiles: TileMap = {}; + let hasChanged = false; + let { score } = state; + + for (let x = 0; x < tileCountPerDimension; x++) { + let newY = 0; + let previousTile: Tile | undefined; + + for (let y = 0; y < tileCountPerDimension; y++) { + const tileId = state.board[y][x]; + const currentTile = state.tiles[tileId]; + + if (!isNil(tileId)) { + if (previousTile?.value === currentTile.value) { + score += previousTile.value * 2; + newTiles[previousTile.id as string] = { + ...previousTile, + value: previousTile.value * 2, + }; + newTiles[tileId] = { + ...currentTile, + position: [x, newY - 1], + }; + previousTile = undefined; + hasChanged = true; + continue; + } + + newBoard[newY][x] = tileId; + newTiles[tileId] = { + ...currentTile, + position: [x, newY], + }; + previousTile = newTiles[tileId]; + if (!isEqual(currentTile.position, [x, newY])) { + hasChanged = true; + } + newY++; + } + } + } + return { + ...state, + board: newBoard, + tiles: newTiles, + hasChanged, + score, + }; + } + case "move_down": { + const newBoard = createBoard(); + const newTiles: TileMap = {}; + let hasChanged = false; + let { score } = state; + + for (let x = 0; x < tileCountPerDimension; x++) { + let newY = tileCountPerDimension - 1; + let previousTile: Tile | undefined; + + for (let y = tileCountPerDimension - 1; y >= 0; y--) { + const tileId = state.board[y][x]; + const currentTile = state.tiles[tileId]; + + if (!isNil(tileId)) { + if (previousTile?.value === currentTile.value) { + score += previousTile.value * 2; + newTiles[previousTile.id as string] = { + ...previousTile, + value: previousTile.value * 2, + }; + newTiles[tileId] = { + ...currentTile, + position: [x, newY + 1], + }; + previousTile = undefined; + hasChanged = true; + continue; + } + + newBoard[newY][x] = tileId; + newTiles[tileId] = { + ...currentTile, + position: [x, newY], + }; + previousTile = newTiles[tileId]; + if (!isEqual(currentTile.position, [x, newY])) { + hasChanged = true; + } + newY--; + } + } + } + return { + ...state, + board: newBoard, + tiles: newTiles, + hasChanged, + score, + }; + } + case "move_left": { + const newBoard = createBoard(); + const newTiles: TileMap = {}; + let hasChanged = false; + let { score } = state; + + for (let y = 0; y < tileCountPerDimension; y++) { + let newX = 0; + let previousTile: Tile | undefined; + + for (let x = 0; x < tileCountPerDimension; x++) { + const tileId = state.board[y][x]; + const currentTile = state.tiles[tileId]; + + if (!isNil(tileId)) { + if (previousTile?.value === currentTile.value) { + score += previousTile.value * 2; + newTiles[previousTile.id as string] = { + ...previousTile, + value: previousTile.value * 2, + }; + newTiles[tileId] = { + ...currentTile, + position: [newX - 1, y], + }; + previousTile = undefined; + hasChanged = true; + continue; + } + + newBoard[y][newX] = tileId; + newTiles[tileId] = { + ...currentTile, + position: [newX, y], + }; + previousTile = newTiles[tileId]; + if (!isEqual(currentTile.position, [newX, y])) { + hasChanged = true; + } + newX++; + } + } + } + return { + ...state, + board: newBoard, + tiles: newTiles, + hasChanged, + score, + }; + } + case "move_right": { + const newBoard = createBoard(); + const newTiles: TileMap = {}; + let hasChanged = false; + let { score } = state; + + for (let y = 0; y < tileCountPerDimension; y++) { + let newX = tileCountPerDimension - 1; + let previousTile: Tile | undefined; + + for (let x = tileCountPerDimension - 1; x >= 0; x--) { + const tileId = state.board[y][x]; + const currentTile = state.tiles[tileId]; + + if (!isNil(tileId)) { + if (previousTile?.value === currentTile.value) { + score += previousTile.value * 2; + newTiles[previousTile.id as string] = { + ...previousTile, + value: previousTile.value * 2, + }; + newTiles[tileId] = { + ...currentTile, + position: [newX + 1, y], + }; + previousTile = undefined; + hasChanged = true; + continue; + } + + newBoard[y][newX] = tileId; + newTiles[tileId] = { + ...state.tiles[tileId], + position: [newX, y], + }; + previousTile = newTiles[tileId]; + if (!isEqual(currentTile.position, [newX, y])) { + hasChanged = true; + } + newX--; + } + } + } + return { + ...state, + board: newBoard, + tiles: newTiles, + hasChanged, + score, + }; + } + default: + return state; + } +} diff --git a/styles/board.module.css b/styles/board.module.css new file mode 100644 index 0000000..f2088b2 --- /dev/null +++ b/styles/board.module.css @@ -0,0 +1,50 @@ +.board { + position: relative; + width: calc(var(--pixel-size) * 8 * 4 + var(--pixel-size) * 5); +} + +.grid { + display: flex; + flex-wrap: wrap; + background: var(--secondary-background); + border: calc(var(--pixel-size) * 0.5) solid var(--secondary-background); + border-radius: calc(var(--pixel-size) * 0.75); +} + +.cell { + width: calc(var(--pixel-size) * 8); + height: calc(var(--pixel-size) * 8); + margin: calc(var(--pixel-size) * 0.5); + border-radius: calc(var(--pixel-size) * 0.5); + background: var(--cell-background); +} + +.tiles { + position: absolute; + z-index: 2; + margin: calc(var(--pixel-size) * 0.5); + left: 0; + top: 0; + right: 0; + bottom: 0; +} + +@media (min-width: 512px) { + .board { + width: calc(var(--pixel-size) * 12.5 * 4 + var(--pixel-size) * 10); + } + + .grid { + border: calc(var(--pixel-size) * 1) solid var(--secondary-background); + } + + .cell { + width: calc(var(--pixel-size) * 12.5); + height: calc(var(--pixel-size) * 12.5); + margin: calc(var(--pixel-size) * 1); + } + + .tiles { + margin: calc(var(--pixel-size) * 1); + } +} diff --git a/styles/globals.css b/styles/globals.css new file mode 100644 index 0000000..8c27a56 --- /dev/null +++ b/styles/globals.css @@ -0,0 +1,71 @@ +:root { + --pixel-size: 8px; + + /* Backgrounds */ + --primary-background: #faf8ef; + --secondary-background: #bbada0; + --cell-background: #cac1b5; + --tile-background: #eee4da; + + /* Colors */ + --primary-text-color: #776e65; + --secondary-text-color: #f9f6f2; +} + +body { + margin: 0; + font-family: + system-ui, + -apple-system, + BlinkMacSystemFont, + "Segoe UI", + Roboto, + Oxygen, + Ubuntu, + Cantarell, + "Open Sans", + "Helvetica Neue", + sans-serif; + background: var(--primary-background); + color: var(--primary-text-color); + font-size: calc(var(--pixel-size) * 2.25); + line-height: calc(var(--pixel-size) * 3.5); +} + +a { + color: var(--primary-text-color); + font-weight: bold; +} + +a:hover, +a:focus { + opacity: 0.8; +} + +h1 { + font-size: calc(var(--pixel-size) * 5); + line-height: calc(var(--pixel-size) * 5); + margin: calc(var(--pixel-size) * 1.5) calc(var(--pixel-size) * 0); +} + +h2 { + font-size: calc(var(--pixel-size) * 2.5); + line-height: calc(var(--pixel-size) * 3.75); + margin: calc(var(--pixel-size) * 2.5) calc(var(--pixel-size) * 0); +} + +h2 > span { + display: block; +} + +@media (min-width: 512px) { + h1 { + font-size: calc(var(--pixel-size) * 8.5); + line-height: calc(var(--pixel-size) * 8.5); + margin: calc(var(--pixel-size) * 2.25) calc(var(--pixel-size) * 0); + } + + h2 > span { + display: inline; + } +} diff --git a/styles/index.module.css b/styles/index.module.css new file mode 100644 index 0000000..69b8807 --- /dev/null +++ b/styles/index.module.css @@ -0,0 +1,62 @@ +.twenty48 { + margin: calc(var(--pixel-size) * 0) auto; + padding: calc(var(--pixel-size) * 1); + width: 100%; + max-width: calc(var(--pixel-size) * 37); +} + +@media (min-width: 512px) { + .twenty48 { + max-width: calc(var(--pixel-size) * 60); + } +} + +.twenty48 > header { + display: flex; + align-items: center; + margin: calc(var(--pixel-size) * 1) calc(var(--pixel-size) * 0); +} + +.twenty48 > header > * { + flex: 1; +} + +.twenty48 > footer { + margin: calc(var(--pixel-size) * 3) calc(var(--pixel-size) * 0); + font-weight: 600; + text-align: center; +} + +.twenty48 > footer > .socials { + display: flex; + justify-content: center; + margin-bottom: calc(var(--pixel-size) * 2); +} + +.twenty48 > footer > .socials > a > img { + vertical-align: middle; + margin: calc(var(--pixel-size) * 0.5); +} + +@media (min-width: 512px) { + .twenty48 > footer { + display: flex; + flex-direction: row-reverse; + align-items: center; + text-align: left; + } + + .twenty48 > footer > div { + width: 100%; + } + + .twenty48 > footer > .socials { + justify-content: right; + margin-bottom: calc(var(--pixel-size) * 0); + } + + .twenty48 > footer > .socials > a > img:last-child { + margin: calc(var(--pixel-size) * 1); + margin-right: calc(var(--pixel-size) * 0); + } +} diff --git a/styles/score.module.css b/styles/score.module.css new file mode 100644 index 0000000..8871fc5 --- /dev/null +++ b/styles/score.module.css @@ -0,0 +1,28 @@ +.score { + background: var(--secondary-background); + border: calc(var(--pixel-size) * 0.5) solid var(--secondary-background); + border-radius: calc(var(--pixel-size) * 0.75); + color: var(--tile-background); + font-size: calc(var(--pixel-size) * 1.5); + line-height: calc(var(--pixel-size) * 3); + font-weight: bold; + text-align: center; + text-transform: uppercase; +} + +.score > div { + font-size: calc(var(--pixel-size) * 2.5); + color: var(--secondary-text-color); +} + +@media (min-width: 512px) { + .score { + border: calc(var(--pixel-size) * 1) solid var(--secondary-background); + font-size: calc(var(--pixel-size) * 2); + line-height: calc(var(--pixel-size) * 3.5); + } + + .score > div { + font-size: calc(var(--pixel-size) * 3.5); + } +} diff --git a/styles/tile.module.css b/styles/tile.module.css new file mode 100644 index 0000000..d710fbb --- /dev/null +++ b/styles/tile.module.css @@ -0,0 +1,137 @@ +.tile { + position: absolute; + width: calc(var(--pixel-size) * 8); + height: calc(var(--pixel-size) * 8); + margin: calc(var(--pixel-size) * 0.5); + border-radius: calc(var(--pixel-size) * 0.5); + background: var(--tile-background); + color: var(--primary-text-color); + font-size: calc(var(--pixel-size) * 4); + line-height: calc(var(--pixel-size) * 8); + font-weight: bold; + text-align: center; + transition-property: left, top, transform; + transition-duration: 200ms, 200ms, 100ms; +} + +@media (min-width: 512px) { + .tile { + width: calc(var(--pixel-size) * 12.5); + height: calc(var(--pixel-size) * 12.5); + margin: calc(var(--pixel-size) * 1); + font-size: calc(var(--pixel-size) * 6); + line-height: calc(var(--pixel-size) * 12.5); + } +} + +/* -=-=-=- START OF TEXT COLOR -=-=-=- */ +.tile8, +.tile16, +.tile32, +.tile64, +.tile128, +.tile256, +.tile512, +.tile1024, +.tile2048, +.tile4096, +.tile8192 { + color: var(--secondary-text-color); +} +/* -=-=-=-= END OF TEXT COLOR =-=-=-=- */ + +/* -=-=-=- START OF TEXT SIZE -=-=-=- */ +.tile128, +.tile256, +.tile512 { + font-size: calc(var(--pixel-size) * 3.25); +} + +.tile1024, +.tile2048, +.tile4096, +.tile8192 { + font-size: calc(var(--pixel-size) * 2.75); +} + +@media (min-width: 512px) { + .tile128, + .tile256, + .tile512 { + font-size: calc(var(--pixel-size) * 5.5); + } + + .tile1024, + .tile2048, + .tile4096, + .tile8192 { + font-size: calc(var(--pixel-size) * 4); + } +} +/* -=-=-=-= END OF TEXT SIZE =-=-=-=- */ + +.tile2 { + box-shadow: + 0 0 30px 10px rgba(243, 215, 116, 0), + inset 0 0 0 1px rgba(255, 255, 255, 0); +} + +.tile4 { + background: #ede0c8; + box-shadow: + 0 0 30px 10px rgba(243, 215, 116, 0), + inset 0 0 0 1px rgba(255, 255, 255, 0); +} + +.tile8 { + background: #f2b179; +} + +.tile16 { + background: #f59563; +} + +.tile32 { + background: #f67c5f; +} + +.tile64 { + background: #f65e3b; +} + +.tile128 { + background: #edcf72; + box-shadow: + 0 0 30px 10px rgba(243, 215, 116, 0.2381), + inset 0 0 0 1px rgba(255, 255, 255, 0.14286); +} + +.tile256 { + background: #edcc61; + box-shadow: + 0 0 30px 10px rgba(243, 215, 116, 0.31746), + inset 0 0 0 1px rgba(255, 255, 255, 0.19048); +} + +.tile512 { + background: #edc850; + box-shadow: + 0 0 30px 10px rgba(243, 215, 116, 0.39683), + inset 0 0 0 1px rgba(255, 255, 255, 0.2381); +} + +.tile1024 { + background: #edc53f; + box-shadow: + 0 0 30px 10px rgba(243, 215, 116, 0.47619), + inset 0 0 0 1px rgba(255, 255, 255, 0.28571); +} + +.tile2048, +.tile4096, +.tile8192 { + background: #edc22e; + box-shadow: + 0 0 30px 10px rgba(243, 215, 116, 0.55556), + inset 0 0 0 1px rgba(255, 255, 255, 0.33333); +} diff --git a/tailwind.config.ts b/tailwind.config.ts deleted file mode 100644 index 7e4bd91..0000000 --- a/tailwind.config.ts +++ /dev/null @@ -1,20 +0,0 @@ -import type { Config } from "tailwindcss"; - -const config: Config = { - content: [ - "./pages/**/*.{js,ts,jsx,tsx,mdx}", - "./components/**/*.{js,ts,jsx,tsx,mdx}", - "./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/tsconfig.json b/tsconfig.json index e7ff90f..670224f 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,5 +1,6 @@ { "compilerOptions": { + "target": "es5", "lib": ["dom", "dom.iterable", "esnext"], "allowJs": true, "skipLibCheck": true, @@ -12,15 +13,10 @@ "isolatedModules": true, "jsx": "preserve", "incremental": true, - "plugins": [ - { - "name": "next" - } - ], "paths": { "@/*": ["./*"] } }, - "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], + "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"], "exclude": ["node_modules"] }
- - -
- Next.js Logo -
- - -