From f16c8c30834a40a53c55e3bdded62b227083c139 Mon Sep 17 00:00:00 2001 From: Tom Sherman Date: Thu, 16 Nov 2023 00:56:46 +0000 Subject: [PATCH] Konami code toolbar --- .vscode/settings.json | 6 + .../app/(maestros)/monorepos/layout.tsx | 6 +- .../app/(maestros)/monorepos/toolbar.tsx | 81 ++++ apps/maestros/next.config.js | 3 +- apps/maestros/package.json | 1 + pnpm-lock.yaml | 349 ++++++++++++++++-- 6 files changed, 415 insertions(+), 31 deletions(-) create mode 100644 apps/maestros/app/(maestros)/monorepos/toolbar.tsx diff --git a/.vscode/settings.json b/.vscode/settings.json index 3790cc6..b8f7f84 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -36,5 +36,11 @@ ], "editor.quickSuggestions": { "strings": true + }, + "[typescript]": { + "editor.defaultFormatter": "biomejs.biome" + }, + "[typescriptreact]": { + "editor.defaultFormatter": "biomejs.biome" } } diff --git a/apps/maestros/app/(maestros)/monorepos/layout.tsx b/apps/maestros/app/(maestros)/monorepos/layout.tsx index 9f8e1c8..b5b047e 100644 --- a/apps/maestros/app/(maestros)/monorepos/layout.tsx +++ b/apps/maestros/app/(maestros)/monorepos/layout.tsx @@ -12,8 +12,9 @@ import { import Link from 'next/link'; import { Analytics } from '@repo/analytics'; import { Twitter, SidebarOpen, Music } from 'lucide-react'; -import { Fragment } from 'react'; +import { Fragment, Suspense } from 'react'; import { linkStyles } from '../navLinks'; +import { Toolbar } from './toolbar'; import { inter } from '#/app/fonts'; import { buildMeta, metadataBaseURI } from '#/app/metadata'; import '#/app/globals.css'; @@ -162,6 +163,9 @@ export default function RootLayout({ + + + ); diff --git a/apps/maestros/app/(maestros)/monorepos/toolbar.tsx b/apps/maestros/app/(maestros)/monorepos/toolbar.tsx new file mode 100644 index 0000000..2305389 --- /dev/null +++ b/apps/maestros/app/(maestros)/monorepos/toolbar.tsx @@ -0,0 +1,81 @@ +'use client'; + +import { VercelToolbar } from '@vercel/toolbar/next'; +import { useEffect, useState } from 'react'; + +const konamiKeyCodes = [ + 'ArrowUp', + 'ArrowUp', + 'ArrowDown', + 'ArrowDown', + 'ArrowLeft', + 'ArrowRight', + 'ArrowLeft', + 'ArrowRight', + 'b', + 'a', +]; + +type State = + | { + complete: false; + sequence: string[]; + } + | { + complete: true; + }; + +const LOCAL_STORAGE_KEY = 'konami-state'; + +export function Toolbar() { + const [state, setState] = useState({ complete: false, sequence: [] }); + + useEffect(() => { + if (state.complete) { + console.log('Konami code complete!'); + localStorage.setItem(LOCAL_STORAGE_KEY, 'yes'); + return; + } + + const storedState = localStorage.getItem(LOCAL_STORAGE_KEY); + + if (storedState === 'yes') { + setState({ complete: true }); + } + + function onKeyDown(e: KeyboardEvent) { + setState((prevState) => { + // This check is to please the typescript compiler + if (prevState.complete) return prevState; + + const newSequence = [...prevState.sequence, e.key]; + if (arrayStartsWith(konamiKeyCodes, newSequence)) { + if (newSequence.length === konamiKeyCodes.length) { + return { complete: true }; + } + return { complete: false, sequence: newSequence }; + } + + return { complete: false, sequence: [] }; + }); + } + + window.addEventListener('keydown', onKeyDown); + + return () => { + window.removeEventListener('keydown', onKeyDown); + }; + }, [state.complete]); + + return state.complete ? : null; +} + +function arrayStartsWith(arr: T[], prefix: T[]) { + if (arr.length < prefix.length) return false; + + for (let i = 0; i < prefix.length; i++) { + if (arr[i] !== prefix[i]) return false; + } + + return true; +} diff --git a/apps/maestros/next.config.js b/apps/maestros/next.config.js index c502e7c..f2e215e 100644 --- a/apps/maestros/next.config.js +++ b/apps/maestros/next.config.js @@ -1,4 +1,5 @@ const { withContentlayer } = require('next-contentlayer'); +const withVercelToolbar = require('@vercel/toolbar/plugins/next')(); /** @type {import('next').NextConfig} */ const moduleExports = { @@ -8,4 +9,4 @@ const moduleExports = { typescript: { ignoreBuildErrors: true }, }; -module.exports = withContentlayer(moduleExports); +module.exports = withVercelToolbar(withContentlayer(moduleExports)); diff --git a/apps/maestros/package.json b/apps/maestros/package.json index 6b83a62..555f5c6 100644 --- a/apps/maestros/package.json +++ b/apps/maestros/package.json @@ -17,6 +17,7 @@ "@repo/db": "workspace:*", "@repo/ui": "workspace:*", "@vercel/og": "^0.0.27", + "@vercel/toolbar": "^0.1.5", "bright": "^0.8.2", "class-variance-authority": "^0.6.1", "contentlayer": "latest", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 284408a..6576fb0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -38,6 +38,9 @@ importers: '@vercel/og': specifier: ^0.0.27 version: 0.0.27 + '@vercel/toolbar': + specifier: ^0.1.5 + version: 0.1.5(next@13.5.2) bright: specifier: ^0.8.2 version: 0.8.4(react@18.2.0) @@ -116,10 +119,10 @@ importers: version: 10.4.14(postcss@8.4.24) eslint: specifier: latest - version: 8.50.0 + version: 8.53.0 eslint-config-next: specifier: ^13.5.2 - version: 13.5.2(eslint@8.50.0)(typescript@5.2.2) + version: 13.5.2(eslint@8.53.0)(typescript@5.2.2) lucide-icons-react: specifier: ^1.0.2 version: 1.0.2(react@18.2.0) @@ -1408,6 +1411,16 @@ packages: eslint-visitor-keys: 3.4.3 dev: true + /@eslint-community/eslint-utils@4.4.0(eslint@8.53.0): + resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + dependencies: + eslint: 8.53.0 + eslint-visitor-keys: 3.4.3 + dev: true + /@eslint-community/regexpp@4.8.1: resolution: {integrity: sha512-PWiOzLIUAjN/w5K17PoF4n6sKBw0gqLHPhywmYHP4t1VFQQVYeb1yWsJwnMVEMl3tUHME7X/SJPZLmtG7XBDxQ==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} @@ -1428,6 +1441,23 @@ packages: transitivePeerDependencies: - supports-color + /@eslint/eslintrc@2.1.3: + resolution: {integrity: sha512-yZzuIG+jnVu6hNSzFEN07e8BxF3uAzYtQb6uDkaYZLo6oYZDCq454c5kB8zxnzfCYyP4MIuyBn10L0DqwujTmA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + ajv: 6.12.6 + debug: 4.3.4 + espree: 9.6.1 + globals: 13.22.0 + ignore: 5.2.4 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + dev: true + /@eslint/js@8.49.0: resolution: {integrity: sha512-1S8uAY/MTJqVx0SC4epBq+N2yhuwtNwLbJYNZyhL2pO1ZVKn5HFXav5T41Ryzy9K9V7ZId2JB2oy/W4aCd9/2w==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -1437,6 +1467,11 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true + /@eslint/js@8.53.0: + resolution: {integrity: sha512-Kn7K8dx/5U6+cT1yEhpX1w4PCSg0M+XyRILPgvwcEBjerFWCwQj5sbr3/VmxqV0JGHCBCzyd6LxypEuehypY1w==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true + /@fal-works/esbuild-plugin-global-externals@2.1.2: resolution: {integrity: sha512-cEee/Z+I12mZcFJshKcCqC8tuX5hG3s+d+9nZ3LabqKF1vKdF41B92pJVCBggjAGORAeOzyyDDKrZwIkLffeOQ==} dev: false @@ -1508,6 +1543,17 @@ packages: transitivePeerDependencies: - supports-color + /@humanwhocodes/config-array@0.11.13: + resolution: {integrity: sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==} + engines: {node: '>=10.10.0'} + dependencies: + '@humanwhocodes/object-schema': 2.0.1 + debug: 4.3.4 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + dev: true + /@humanwhocodes/module-importer@1.0.1: resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} engines: {node: '>=12.22'} @@ -1515,6 +1561,10 @@ packages: /@humanwhocodes/object-schema@1.2.1: resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} + /@humanwhocodes/object-schema@2.0.1: + resolution: {integrity: sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==} + dev: true + /@jridgewell/gen-mapping@0.3.3: resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} engines: {node: '>=6.0.0'} @@ -3195,6 +3245,117 @@ packages: tailwindcss: 3.3.3 dev: true + /@tinyhttp/accepts@1.3.0: + resolution: {integrity: sha512-YaJ4EMgVUI6JHzWO14lr6vn/BLJEoFN4Sqd20l0/oBcLLENkP8gnPtX1jB7OhIu0AE40VCweAqvSP+0/pgzB1g==} + engines: {node: '>=12.4.0'} + dependencies: + es-mime-types: 0.0.16 + negotiator: 0.6.3 + dev: false + + /@tinyhttp/app@1.3.0: + resolution: {integrity: sha512-EPqdanEZ/vhpuxl4Nn/QIkS+5Wkbt8NgO/FqYj2kHttvwYkaoSFi7HUns17UQAQcak5JLbPEt67Qf4wvwy/fNQ==} + engines: {node: '>=12.x'} + dependencies: + '@tinyhttp/cookie': 1.3.0 + '@tinyhttp/proxy-addr': 1.3.0 + '@tinyhttp/req': 1.3.0 + '@tinyhttp/res': 1.3.0 + '@tinyhttp/router': 1.3.0 + regexparam: 1.3.0 + dev: false + + /@tinyhttp/content-disposition@1.3.0: + resolution: {integrity: sha512-sSj7YDVz7NcHDn6/O/I3WjtC8ZWJKKIGULoV+pgrLvJvtXK5WroE1Fm8rHRQewh2d9NMajh/7NX6NuSlF8LUaQ==} + engines: {node: '>=12.4.0'} + dev: false + + /@tinyhttp/cookie-signature@1.3.0: + resolution: {integrity: sha512-xCQZyCT1S/Rn2Z3SX2gp4IDAwW9AUnjky6hKvqzmMaQqEbIk7e2GCOXW5yjndbfGNTJAxj0tuLNMF4G8aLkfMw==} + engines: {node: '>=12.4.0'} + dev: false + + /@tinyhttp/cookie@1.3.0: + resolution: {integrity: sha512-4ZVfP8WApV9ZRchv/1i0QiKdP0wxWTUNv4ZsMQrqK0p1KXA0/SvpYUTS6bp1E6Yo0dNxcKte4wJ4FCWFDcShhQ==} + engines: {node: '>=12.4.0'} + dev: false + + /@tinyhttp/encode-url@0.3.0: + resolution: {integrity: sha512-QM5j5t0GLucBuBePoOilcz1/zDpqX+LtUdtkPn7IvoHTNJYNxEfSUmIMPUPhyVY7mvbwvafPUCK8u1Byx0+NfQ==} + engines: {node: '>=12.4.0'} + dev: false + + /@tinyhttp/etag@1.3.0: + resolution: {integrity: sha512-aWnDb4NuMf/UTm1H88rZgqu32E6t3iDHSHtAppiQCH4M7jRfTUEpiZjz//S+giDnOxAuYttLrXQ1+HGpgzyYUQ==} + engines: {node: '>=12.4.0'} + dev: false + + /@tinyhttp/forwarded@1.3.0: + resolution: {integrity: sha512-U2FPtOH+DoFtd98edMRyqiquRaiuEl5I2PMUWdKaBSpiAIR96buyanQ7hScenz1MihK0AVid7wLAviaJU+Xlyg==} + engines: {node: '>=12.4.0'} + dev: false + + /@tinyhttp/proxy-addr@1.3.0: + resolution: {integrity: sha512-7Kv6YIC/PlhUwyqAGXhg4DoQDOzbYlcGPkNv/KZAMFj9fZ6IEZyneyaClnD21hMT8qa7g3Z/66hxLa/WxiPAYA==} + engines: {node: '>=12.4.0'} + dependencies: + '@tinyhttp/forwarded': 1.3.0 + ipaddr.js: 2.1.0 + dev: false + + /@tinyhttp/req@1.3.0: + resolution: {integrity: sha512-zIbtJA7Hp2p4MqszP2jOBi2NWi8fTGd4lso+0CjwJa+WTE+lgXVAy6mN12rTAxjXweAyRvQpRIJ5W2r8OLuEXQ==} + engines: {node: '>=12.4.0'} + dependencies: + '@tinyhttp/accepts': 1.3.0 + '@tinyhttp/type-is': 1.3.0 + '@tinyhttp/url': 1.3.0 + es-fresh: 0.0.8 + range-parser: 1.2.1 + dev: false + + /@tinyhttp/res@1.3.0: + resolution: {integrity: sha512-ez6fCpGsYoU6HUBq0e+m4l6Cffu2FeucK+m5Z6a8sBGqLR7/teB1pFufCOPwrdwzdNrLNarGJpsNQpvQqDMWaA==} + engines: {node: '>=12.4.0'} + dependencies: + '@tinyhttp/content-disposition': 1.3.0 + '@tinyhttp/cookie': 1.3.0 + '@tinyhttp/cookie-signature': 1.3.0 + '@tinyhttp/encode-url': 0.3.0 + '@tinyhttp/req': 1.3.0 + '@tinyhttp/send': 1.3.0 + es-mime-types: 0.0.16 + es-vary: 0.0.8 + escape-html: 1.0.3 + dev: false + + /@tinyhttp/router@1.3.0: + resolution: {integrity: sha512-I2HDtMq7WM4E1JfLyllJp+IAp3Hc0xLetfgi8d1TQkhms8/XC9ZhgOIlimc3//ncMZSIxofkj7TpDCdEd6M/eQ==} + engines: {node: '>=12.4.0'} + dev: false + + /@tinyhttp/send@1.3.0: + resolution: {integrity: sha512-3Tn8NaLhNdcIJQqc/3ZBFV0hX6jCaFNDX5/vWxoPubDrh8HOpn2foPXL7ZIRk8GDkaB/M3cSzKIlKpnTKmh0Nw==} + engines: {node: '>=12.4.0'} + dependencies: + '@tinyhttp/etag': 1.3.0 + es-content-type: 0.0.10 + es-mime-types: 0.0.16 + dev: false + + /@tinyhttp/type-is@1.3.0: + resolution: {integrity: sha512-3NClOYPNJst9vVLcb793epRI+ZuRwl6IjxSq9LkGN8TEBbtNgv2vTmXZRWcUs2zY9Ju+NQIYecWcsG0Kx23E+g==} + engines: {node: '>=12.4.0'} + dependencies: + es-content-type: 0.0.10 + es-mime-types: 0.0.16 + dev: false + + /@tinyhttp/url@1.3.0: + resolution: {integrity: sha512-GgdKez5AaQRIm0kFNp7BZnxFQ2F7LZ7g3rOQ/v11oYZR3jhH7JPGM+7hZQjYqFXD/5TK/of7hepu418K2fghvg==} + engines: {node: '>=12.4.0'} + dev: false + /@total-typescript/ts-reset@0.5.1: resolution: {integrity: sha512-AqlrT8YA1o7Ff5wPfMOL0pvL+1X+sw60NN6CcOCqs658emD6RfiXhF7Gu9QcfKBH7ELY2nInLhKSCWVoNL70MQ==} dev: true @@ -3652,7 +3813,7 @@ packages: transitivePeerDependencies: - supports-color - /@typescript-eslint/parser@5.59.1(eslint@8.50.0)(typescript@5.2.2): + /@typescript-eslint/parser@5.59.1(eslint@8.53.0)(typescript@5.2.2): resolution: {integrity: sha512-nzjFAN8WEu6yPRDizIFyzAfgK7nybPodMNFGNH0M9tei2gYnYszRDqVA0xlnRjkl7Hkx2vYrEdb6fP2a21cG1g==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -3666,7 +3827,7 @@ packages: '@typescript-eslint/types': 5.59.1 '@typescript-eslint/typescript-estree': 5.59.1(typescript@5.2.2) debug: 4.3.4 - eslint: 8.50.0 + eslint: 8.53.0 typescript: 5.2.2 transitivePeerDependencies: - supports-color @@ -3907,6 +4068,10 @@ packages: eslint-visitor-keys: 3.4.3 dev: true + /@ungap/structured-clone@1.2.0: + resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} + dev: true + /@vercel/analytics@1.0.2: resolution: {integrity: sha512-BZFxVrv24VbNNl5xMxqUojQIegEeXMI6rX3rg1uVLYUEXsuKNBSAEQf4BWEcjQDp/8aYJOj6m8V4PUA3x/cxgg==} dev: false @@ -3966,6 +4131,20 @@ packages: - jest - supports-color + /@vercel/toolbar@0.1.5(next@13.5.2): + resolution: {integrity: sha512-LlZDI7zYsPnEOYb08dtDrOIfHWodvInLWVPhd1tH30KVDy9RvtQhnrgF1QLN5uyu9CKjD7ugiJ02R3I8bVQcLg==} + peerDependencies: + next: '>=11.0.0' + dependencies: + '@tinyhttp/app': 1.3.0 + chokidar: 3.5.3 + execa: 5.1.1 + find-up: 5.0.0 + get-port: 5.1.1 + next: 13.5.2(@babel/core@7.22.20)(@opentelemetry/api@1.6.0)(react-dom@18.2.0)(react@18.2.0) + strip-ansi: 6.0.1 + dev: false + /@vitejs/plugin-react@4.0.4(vite@4.4.9): resolution: {integrity: sha512-7wU921ABnNYkETiMaZy7XqpueMnpu5VxvVps13MjmCo+utBdD79sZzrApHawHtVX66cCJQQTXFcjH0y9dSUK8g==} engines: {node: ^14.18.0 || >=16.0.0} @@ -5043,6 +5222,16 @@ packages: unbox-primitive: 1.0.2 which-typed-array: 1.1.11 + /es-content-type@0.0.10: + resolution: {integrity: sha512-yCgcv1M2IuFUoGZ3zE4OR2INGmZOwEuyaE5WX4MOKGpJcO8JXgVOIcXVicwnTqlxvx6qs9IJGl/Rr1+YtCkRgg==} + engines: {node: '>=12.x'} + dev: false + + /es-fresh@0.0.8: + resolution: {integrity: sha512-ZM+K/T/zHJVuOhaz19iymidACazB1fl2uihBtSfRie8YzN1YM+KldVmNaU+GSmVvTOPSO2utKOhxcOinr5tKjw==} + engines: {node: '>=12.x'} + dev: false + /es-iterator-helpers@1.0.15: resolution: {integrity: sha512-GhoY8uYqd6iwUl2kgjTm4CZAf6oo5mHK7BPqx3rKgx893YSsy0LGHV6gfqqQvZt/8xM8xeOnfXBCfqclMKkJ5g==} dependencies: @@ -5061,6 +5250,13 @@ packages: iterator.prototype: 1.1.2 safe-array-concat: 1.0.1 + /es-mime-types@0.0.16: + resolution: {integrity: sha512-84QoSLeA7cdTeHpALFNl3ZOstXfvLt426/kaOgmSxmNUOhi4GesKVkhJgIfnsqGNziYezVA8rvZUsXj7oWX2qQ==} + engines: {node: '>=12.x'} + dependencies: + mime-db: 1.52.0 + dev: false + /es-set-tostringtag@2.0.1: resolution: {integrity: sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==} engines: {node: '>= 0.4'} @@ -5082,6 +5278,11 @@ packages: is-date-object: 1.0.5 is-symbol: 1.0.4 + /es-vary@0.0.8: + resolution: {integrity: sha512-fiERjQiCHrXUAToNRT/sh7MtXnfei9n7cF9oVQRUEp9L5BGXsTKSPaXq8L+4v0c/ezfvuTWd/f0JSl5IBRUvSg==} + engines: {node: '>=12.x'} + dev: false + /esbuild@0.18.20: resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==} engines: {node: '>=12'} @@ -5146,6 +5347,10 @@ packages: resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} engines: {node: '>=6'} + /escape-html@1.0.3: + resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} + dev: false + /escape-string-regexp@1.0.5: resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} engines: {node: '>=0.8.0'} @@ -5154,7 +5359,7 @@ packages: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} - /eslint-config-next@13.5.2(eslint@8.50.0)(typescript@5.2.2): + /eslint-config-next@13.5.2(eslint@8.53.0)(typescript@5.2.2): resolution: {integrity: sha512-kCF7k7fHBtFtxfP6J6AP6Mo0vW3CrFeoIuoZ7NHGIvLFc/RUaIspJ6inO/R33zE1o9t/lbJgTnsqnRB++sxCUQ==} peerDependencies: eslint: ^7.23.0 || ^8.0.0 @@ -5165,14 +5370,14 @@ packages: dependencies: '@next/eslint-plugin-next': 13.5.2 '@rushstack/eslint-patch': 1.4.0 - '@typescript-eslint/parser': 5.59.1(eslint@8.50.0)(typescript@5.2.2) - eslint: 8.50.0 + '@typescript-eslint/parser': 5.59.1(eslint@8.53.0)(typescript@5.2.2) + eslint: 8.53.0 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.0(@typescript-eslint/parser@5.59.1)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.28.1)(eslint@8.50.0) - eslint-plugin-import: 2.28.1(@typescript-eslint/parser@5.59.1)(eslint@8.50.0) - eslint-plugin-jsx-a11y: 6.7.1(eslint@8.50.0) - eslint-plugin-react: 7.33.2(eslint@8.50.0) - eslint-plugin-react-hooks: 4.6.0(eslint@8.50.0) + eslint-import-resolver-typescript: 3.6.0(@typescript-eslint/parser@5.59.1)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.28.1)(eslint@8.53.0) + eslint-plugin-import: 2.28.1(@typescript-eslint/parser@5.59.1)(eslint@8.53.0) + eslint-plugin-jsx-a11y: 6.7.1(eslint@8.53.0) + eslint-plugin-react: 7.33.2(eslint@8.53.0) + eslint-plugin-react-hooks: 4.6.0(eslint@8.53.0) typescript: 5.2.2 transitivePeerDependencies: - eslint-import-resolver-webpack @@ -5213,7 +5418,7 @@ packages: transitivePeerDependencies: - supports-color - /eslint-import-resolver-typescript@3.6.0(@typescript-eslint/parser@5.59.1)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.28.1)(eslint@8.50.0): + /eslint-import-resolver-typescript@3.6.0(@typescript-eslint/parser@5.59.1)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.28.1)(eslint@8.53.0): resolution: {integrity: sha512-QTHR9ddNnn35RTxlaEnx2gCxqFlF2SEN0SE2d17SqwyM7YOSI2GHWRYp5BiRkObTUNYPupC/3Fq2a0PpT+EKpg==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: @@ -5222,9 +5427,9 @@ packages: dependencies: debug: 4.3.4 enhanced-resolve: 5.15.0 - eslint: 8.50.0 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.59.1)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.0)(eslint@8.50.0) - eslint-plugin-import: 2.28.1(@typescript-eslint/parser@5.59.1)(eslint@8.50.0) + eslint: 8.53.0 + eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.59.1)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.0)(eslint@8.53.0) + eslint-plugin-import: 2.28.1(@typescript-eslint/parser@5.59.1)(eslint@8.53.0) fast-glob: 3.3.1 get-tsconfig: 4.7.1 is-core-module: 2.13.0 @@ -5287,7 +5492,7 @@ packages: transitivePeerDependencies: - supports-color - /eslint-module-utils@2.8.0(@typescript-eslint/parser@5.59.1)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.0)(eslint@8.50.0): + /eslint-module-utils@2.8.0(@typescript-eslint/parser@5.59.1)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.0)(eslint@8.53.0): resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} engines: {node: '>=4'} peerDependencies: @@ -5308,16 +5513,16 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 5.59.1(eslint@8.50.0)(typescript@5.2.2) + '@typescript-eslint/parser': 5.59.1(eslint@8.53.0)(typescript@5.2.2) debug: 3.2.7 - eslint: 8.50.0 + eslint: 8.53.0 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.0(@typescript-eslint/parser@5.59.1)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.28.1)(eslint@8.50.0) + eslint-import-resolver-typescript: 3.6.0(@typescript-eslint/parser@5.59.1)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.28.1)(eslint@8.53.0) transitivePeerDependencies: - supports-color dev: true - /eslint-module-utils@2.8.0(@typescript-eslint/parser@5.59.1)(eslint-import-resolver-node@0.3.9)(eslint@8.50.0): + /eslint-module-utils@2.8.0(@typescript-eslint/parser@5.59.1)(eslint-import-resolver-node@0.3.9)(eslint@8.53.0): resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} engines: {node: '>=4'} peerDependencies: @@ -5340,7 +5545,7 @@ packages: dependencies: '@typescript-eslint/parser': 5.59.1(eslint@8.49.0)(typescript@5.2.2) debug: 3.2.7 - eslint: 8.50.0 + eslint: 8.53.0 eslint-import-resolver-node: 0.3.9 transitivePeerDependencies: - supports-color @@ -5390,7 +5595,7 @@ packages: - eslint-import-resolver-webpack - supports-color - /eslint-plugin-import@2.28.1(@typescript-eslint/parser@5.59.1)(eslint@8.50.0): + /eslint-plugin-import@2.28.1(@typescript-eslint/parser@5.59.1)(eslint@8.53.0): resolution: {integrity: sha512-9I9hFlITvOV55alzoKBI+K9q74kv0iKMeY6av5+umsNwayt59fz692daGyjR+oStBQgx6nwR9rXldDev3Clw+A==} engines: {node: '>=4'} peerDependencies: @@ -5407,9 +5612,9 @@ packages: array.prototype.flatmap: 1.3.2 debug: 3.2.7 doctrine: 2.1.0 - eslint: 8.50.0 + eslint: 8.53.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.59.1)(eslint-import-resolver-node@0.3.9)(eslint@8.50.0) + eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.59.1)(eslint-import-resolver-node@0.3.9)(eslint@8.53.0) has: 1.0.3 is-core-module: 2.13.0 is-glob: 4.0.3 @@ -5469,7 +5674,7 @@ packages: object.fromentries: 2.0.7 semver: 6.3.1 - /eslint-plugin-jsx-a11y@6.7.1(eslint@8.50.0): + /eslint-plugin-jsx-a11y@6.7.1(eslint@8.53.0): resolution: {integrity: sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==} engines: {node: '>=4.0'} peerDependencies: @@ -5484,7 +5689,7 @@ packages: axobject-query: 3.2.1 damerau-levenshtein: 1.0.8 emoji-regex: 9.2.2 - eslint: 8.50.0 + eslint: 8.53.0 has: 1.0.3 jsx-ast-utils: 3.3.5 language-tags: 1.0.5 @@ -5523,6 +5728,15 @@ packages: eslint: 8.50.0 dev: true + /eslint-plugin-react-hooks@4.6.0(eslint@8.53.0): + resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==} + engines: {node: '>=10'} + peerDependencies: + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 + dependencies: + eslint: 8.53.0 + dev: true + /eslint-plugin-react-refresh@0.4.3(eslint@8.50.0): resolution: {integrity: sha512-Hh0wv8bUNY877+sI0BlCUlsS0TYYQqvzEwJsJJPM2WF4RnTStSnSR3zdJYa2nPOJgg3UghXi54lVyMSmpCalzA==} peerDependencies: @@ -5555,7 +5769,7 @@ packages: semver: 6.3.1 string.prototype.matchall: 4.0.10 - /eslint-plugin-react@7.33.2(eslint@8.50.0): + /eslint-plugin-react@7.33.2(eslint@8.53.0): resolution: {integrity: sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==} engines: {node: '>=4'} peerDependencies: @@ -5566,7 +5780,7 @@ packages: array.prototype.tosorted: 1.1.2 doctrine: 2.1.0 es-iterator-helpers: 1.0.15 - eslint: 8.50.0 + eslint: 8.53.0 estraverse: 5.3.0 jsx-ast-utils: 3.3.5 minimatch: 3.1.2 @@ -5751,6 +5965,53 @@ packages: - supports-color dev: true + /eslint@8.53.0: + resolution: {integrity: sha512-N4VuiPjXDUa4xVeV/GC/RV3hQW9Nw+Y463lkWaKKXKYMvmRiRDAtfpuPFLN+E1/6ZhyR8J2ig+eVREnYgUsiag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + hasBin: true + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.53.0) + '@eslint-community/regexpp': 4.8.1 + '@eslint/eslintrc': 2.1.3 + '@eslint/js': 8.53.0 + '@humanwhocodes/config-array': 0.11.13 + '@humanwhocodes/module-importer': 1.0.1 + '@nodelib/fs.walk': 1.2.8 + '@ungap/structured-clone': 1.2.0 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.3 + debug: 4.3.4 + doctrine: 3.0.0 + escape-string-regexp: 4.0.0 + eslint-scope: 7.2.2 + eslint-visitor-keys: 3.4.3 + espree: 9.6.1 + esquery: 1.5.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 6.0.1 + find-up: 5.0.0 + glob-parent: 6.0.2 + globals: 13.22.0 + graphemer: 1.4.0 + ignore: 5.2.4 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + is-path-inside: 3.0.3 + js-yaml: 4.1.0 + json-stable-stringify-without-jsonify: 1.0.1 + levn: 0.4.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.3 + strip-ansi: 6.0.1 + text-table: 0.2.0 + transitivePeerDependencies: + - supports-color + dev: true + /espree@9.6.1: resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -6104,6 +6365,11 @@ packages: engines: {node: '>=6'} dev: false + /get-port@5.1.1: + resolution: {integrity: sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==} + engines: {node: '>=8'} + dev: false + /get-stream@6.0.1: resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} engines: {node: '>=10'} @@ -6542,6 +6808,11 @@ packages: loose-envify: 1.4.0 dev: false + /ipaddr.js@2.1.0: + resolution: {integrity: sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==} + engines: {node: '>= 10'} + dev: false + /is-alphabetical@2.0.1: resolution: {integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==} dev: false @@ -7551,6 +7822,11 @@ packages: braces: 3.0.2 picomatch: 2.3.1 + /mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + dev: false + /mimic-fn@2.1.0: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} engines: {node: '>=6'} @@ -7617,6 +7893,11 @@ packages: /natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + /negotiator@0.6.3: + resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} + engines: {node: '>= 0.6'} + dev: false + /neo-async@2.6.2: resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} dev: true @@ -8466,6 +8747,11 @@ packages: resolution: {integrity: sha512-FeUlLe40ROXHVWLZkzmeR2PNYWdkvTXEXhW6FX8axRv1ODt8Gxed3APrE1Qb5i1n70ZzZGRmvs0jY3v/BRcJQQ==} dev: false + /range-parser@1.2.1: + resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} + engines: {node: '>= 0.6'} + dev: false + /rc@1.2.8: resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} hasBin: true @@ -8726,6 +9012,11 @@ packages: define-properties: 1.2.1 set-function-name: 2.0.1 + /regexparam@1.3.0: + resolution: {integrity: sha512-6IQpFBv6e5vz1QAqI+V4k8P2e/3gRrqfCJ9FI+O1FLQTO+Uz6RXZEZOPmTJ6hlGj7gkERzY5BRCv09whKP96/g==} + engines: {node: '>=6'} + dev: false + /registry-auth-token@3.3.2: resolution: {integrity: sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==} dependencies: