From 38d059f008564e6592457c495d31ac9b433a4d01 Mon Sep 17 00:00:00 2001 From: Guilherme Werner Date: Tue, 10 Oct 2023 20:37:03 -0300 Subject: [PATCH] Update api and add website --- .gitignore | 35 +++ api/main.py | 32 ++- next.config.js | 6 + package.json | 26 ++ public/favicon.ico | Bin 0 -> 25931 bytes src/pages/_app.tsx | 6 + src/pages/_document.tsx | 17 ++ src/pages/index.tsx | 96 +++++++ src/styles/globals.scss | 11 + test.rest | 9 + tsconfig.json | 34 +++ yarn.lock | 539 ++++++++++++++++++++++++++++++++++++++++ 12 files changed, 807 insertions(+), 4 deletions(-) create mode 100644 .gitignore create mode 100644 next.config.js create mode 100644 package.json create mode 100644 public/favicon.ico create mode 100644 src/pages/_app.tsx create mode 100644 src/pages/_document.tsx create mode 100644 src/pages/index.tsx create mode 100644 src/styles/globals.scss create mode 100644 tsconfig.json create mode 100644 yarn.lock diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..8f322f0 --- /dev/null +++ b/.gitignore @@ -0,0 +1,35 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.js + +# testing +/coverage + +# next.js +/.next/ +/out/ + +# production +/build + +# misc +.DS_Store +*.pem + +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# local env files +.env*.local + +# vercel +.vercel + +# typescript +*.tsbuildinfo +next-env.d.ts diff --git a/api/main.py b/api/main.py index 8aa48a0..af4c804 100644 --- a/api/main.py +++ b/api/main.py @@ -8,8 +8,13 @@ from transformers import * from tqdm import tqdm import urllib.parse as parse import os +import base64 +from io import BytesIO +import re +from flask_cors import CORS app = Flask(__name__) +CORS(app) device = "cuda" if torch.cuda.is_available() else "cpu" print(device) @@ -24,8 +29,7 @@ def load_image(image_path): return Image.open(requests.get(image_path, stream=True).raw) # Função para obter a legenda de uma imagem -def get_caption(model, image_processor, tokenizer, image_path): - image = load_image(image_path) +def get_caption(model, image_processor, tokenizer, image): img = image_processor(image, return_tensors="pt").to(device) output = model.generate(**img) caption = tokenizer.batch_decode(output, skip_special_tokens=True)[0] @@ -37,11 +41,31 @@ def caption_image(): data = request.get_json() if 'image_url' in data: image_url = data['image_url'] - caption = get_caption(finetuned_model, finetuned_image_processor, finetuned_tokenizer, image_url) + caption = get_caption(finetuned_model, finetuned_image_processor, finetuned_tokenizer, load_image(image_path)) response = {"caption": caption} return jsonify(response) else: return jsonify({"error": "Missing 'image_url'"}), 400 +# Rota da api para obter a caption da imagem +@app.route('/caption-base64', methods=['POST']) +def caption_image_base64(): + data = request.get_json() + + print(data) + + if 'image_base64' in data: + image_base64 = re.sub('^data:image/.+;base64,', '', data['image_base64']) + image_data = base64.b64decode(image_base64) + image_stream = BytesIO(image_data) + image = Image.open(image_stream) + caption = get_caption(finetuned_model, finetuned_image_processor, finetuned_tokenizer, image) + response = {"caption": caption} + return jsonify(response) + else: + return jsonify({"error": "Missing 'image_base64'"}), 400 + + + if __name__ == '__main__': - app.run(host='0.0.0.0', port=5885) + app.run(host='0.0.0.0', port=5885, debug=True) diff --git a/next.config.js b/next.config.js new file mode 100644 index 0000000..5786109 --- /dev/null +++ b/next.config.js @@ -0,0 +1,6 @@ +/** @type {import('next').NextConfig} */ +const nextConfig = { + reactStrictMode: true, +} + +module.exports = nextConfig diff --git a/package.json b/package.json new file mode 100644 index 0000000..4341c1a --- /dev/null +++ b/package.json @@ -0,0 +1,26 @@ +{ + "name": "image-caption", + "version": "0.1.0", + "private": true, + "scripts": { + "dev": "next dev", + "build": "next build", + "start": "next start", + "lint": "next lint" + }, + "dependencies": { + "bootstrap": "^5.3.2", + "next": "13.5.4", + "react": "^18", + "react-bootstrap": "^2.9.0", + "react-dom": "^18", + "react-icons": "^4.11.0", + "sass": "^1.69.2" + }, + "devDependencies": { + "@types/node": "^20", + "@types/react": "^18", + "@types/react-dom": "^18", + "typescript": "^5" + } +} diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..718d6fea4835ec2d246af9800eddb7ffb276240c GIT binary patch literal 25931 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 LrJugUA?W`A8`#=m literal 0 HcmV?d00001 diff --git a/src/pages/_app.tsx b/src/pages/_app.tsx new file mode 100644 index 0000000..65310b8 --- /dev/null +++ b/src/pages/_app.tsx @@ -0,0 +1,6 @@ +import '@/styles/globals.scss' +import type { AppProps } from 'next/app' + +export default function App({ Component, pageProps }: AppProps) { + return +} diff --git a/src/pages/_document.tsx b/src/pages/_document.tsx new file mode 100644 index 0000000..4ace89a --- /dev/null +++ b/src/pages/_document.tsx @@ -0,0 +1,17 @@ +import { Html, Head, Main, NextScript } from 'next/document' + +export default function Document() { + return ( + + + + + + + +
+ + + + ) +} diff --git a/src/pages/index.tsx b/src/pages/index.tsx new file mode 100644 index 0000000..e8cb38b --- /dev/null +++ b/src/pages/index.tsx @@ -0,0 +1,96 @@ +import Head from 'next/head' +import { Inter } from 'next/font/google' +import styles from '@/styles/Home.module.css' + +import Container from 'react-bootstrap/Container'; +import Nav from 'react-bootstrap/Nav'; +import Navbar from 'react-bootstrap/Navbar'; +import NavDropdown from 'react-bootstrap/NavDropdown'; +import Button from 'react-bootstrap/Button'; +import Form from 'react-bootstrap/Form'; +import Image from 'react-bootstrap/Image'; +import Ratio from 'react-bootstrap/Ratio'; +import { useState } from 'react'; + +export default function Home() { + const [image64, setImage64] = useState(null); + const [imageUrl, setImageUrl] = useState(null); + const [caption, setCaption] = useState(null); + + const handleImageChange = (e: any) => { + const file = e.target.files[0]; + + if (file) { + const imageUrl = URL.createObjectURL(file); + setImageUrl(imageUrl); + + const reader = new FileReader(); + + reader.onload = (e) => { + const base64Image = e?.target?.result; + setImage64(base64Image); + }; + + reader.readAsDataURL(file); + } + }; + + const handleSubmit = () => { + if (imageUrl) { + fetch("http://localhost:5885/caption-base64", { + method: "POST", + body: JSON.stringify({ image_base64: image64 }), + headers: { + "Content-Type": "application/json", + } + }).then((res) => { + if (res.status === 200) { + return res.json(); + } + }).then((data) => { + setCaption(data.caption) + }) + } + }; + + return ( + <> + + Image Caption + +
+ + + Image Caption + + +
+
+ +
+
+ + + +
+
+
+ + Image + + +
+ +
+
+

{caption}

+
+
+ + ) +} diff --git a/src/styles/globals.scss b/src/styles/globals.scss new file mode 100644 index 0000000..8160432 --- /dev/null +++ b/src/styles/globals.scss @@ -0,0 +1,11 @@ +@import "~bootstrap/scss/_functions"; +@import "~bootstrap/scss/_variables"; +@import "~bootstrap/scss/_variables-dark"; +@import "~bootstrap/scss/_mixins"; +@import "~bootstrap/scss/bootstrap"; + +@import url("https://fonts.googleapis.com/css2?family=Roboto:ital,wght@0,300;0,400;0,500;0,700;1,300&display=swap"); + +body { + font-family: "Roboto", var(--bs-font-sans-serif); +} diff --git a/test.rest b/test.rest index 36fecf9..c816962 100644 --- a/test.rest +++ b/test.rest @@ -9,6 +9,15 @@ Content-Type: application/json ### +POST http://localhost:5885/caption-base64 +Content-Type: application/json + +{ + "image_base64": "data:image/jpeg;base64,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" +} + +### + POST https://ti6.fornaxhost.net/caption Content-Type: application/json diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..31732f2 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,34 @@ +{ + "compilerOptions": { + "target": "es5", + "lib": [ + "dom", + "dom.iterable", + "esnext" + ], + "allowJs": true, + "skipLibCheck": true, + "strict": true, + "noEmit": true, + "esModuleInterop": true, + "module": "esnext", + "moduleResolution": "bundler", + "resolveJsonModule": true, + "isolatedModules": true, + "jsx": "preserve", + "incremental": true, + "paths": { + "@/*": [ + "./src/*" + ] + } + }, + "include": [ + "next-env.d.ts", + "**/*.ts", + "**/*.tsx" + ], + "exclude": [ + "node_modules" + ] +} diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 0000000..22d8570 --- /dev/null +++ b/yarn.lock @@ -0,0 +1,539 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@babel/runtime@^7.21.0", "@babel/runtime@^7.22.5", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.3", "@babel/runtime@^7.8.7": + version "7.23.1" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.1.tgz#72741dc4d413338a91dcb044a86f3c0bc402646d" + integrity sha512-hC2v6p8ZSI/W0HUzh3V8C5g+NwSKzKPtJwSpTjwl0o297GP9+ZLQSkdvHz46CM3LqyoXxq+5G9komY+eSqSO0g== + dependencies: + regenerator-runtime "^0.14.0" + +"@next/env@13.5.4": + version "13.5.4" + resolved "https://registry.yarnpkg.com/@next/env/-/env-13.5.4.tgz#777c3af16de2cf2f611b6c8126910062d13d222c" + integrity sha512-LGegJkMvRNw90WWphGJ3RMHMVplYcOfRWf2Be3td3sUa+1AaxmsYyANsA+znrGCBjXJNi4XAQlSoEfUxs/4kIQ== + +"@next/swc-darwin-arm64@13.5.4": + version "13.5.4" + resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.5.4.tgz#241957774fef3f876dc714cfc0ca6f00f561737e" + integrity sha512-Df8SHuXgF1p+aonBMcDPEsaahNo2TCwuie7VXED4FVyECvdXfRT9unapm54NssV9tF3OQFKBFOdlje4T43VO0w== + +"@next/swc-darwin-x64@13.5.4": + version "13.5.4" + resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-13.5.4.tgz#fa11bb97bf06cd45cbd554354b46bf93e22c025b" + integrity sha512-siPuUwO45PnNRMeZnSa8n/Lye5ZX93IJom9wQRB5DEOdFrw0JjOMu1GINB8jAEdwa7Vdyn1oJ2xGNaQpdQQ9Pw== + +"@next/swc-linux-arm64-gnu@13.5.4": + version "13.5.4" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.5.4.tgz#dd3a482cd6871ed23b049066a0f3c4c2f955dc88" + integrity sha512-l/k/fvRP/zmB2jkFMfefmFkyZbDkYW0mRM/LB+tH5u9pB98WsHXC0WvDHlGCYp3CH/jlkJPL7gN8nkTQVrQ/2w== + +"@next/swc-linux-arm64-musl@13.5.4": + version "13.5.4" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.5.4.tgz#ed6d7abaf5712cff2752ce5300d6bacc6aff1b18" + integrity sha512-YYGb7SlLkI+XqfQa8VPErljb7k9nUnhhRrVaOdfJNCaQnHBcvbT7cx/UjDQLdleJcfyg1Hkn5YSSIeVfjgmkTg== + +"@next/swc-linux-x64-gnu@13.5.4": + version "13.5.4" + resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.5.4.tgz#977a040388e8a685a3a85e0dbdff90a4ee2a7189" + integrity sha512-uE61vyUSClnCH18YHjA8tE1prr/PBFlBFhxBZis4XBRJoR+txAky5d7gGNUIbQ8sZZ7LVkSVgm/5Fc7mwXmRAg== + +"@next/swc-linux-x64-musl@13.5.4": + version "13.5.4" + resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.5.4.tgz#3e29a0ad8efc016196c3a120da04397eea328b2a" + integrity sha512-qVEKFYML/GvJSy9CfYqAdUexA6M5AklYcQCW+8JECmkQHGoPxCf04iMh7CPR7wkHyWWK+XLt4Ja7hhsPJtSnhg== + +"@next/swc-win32-arm64-msvc@13.5.4": + version "13.5.4" + resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.5.4.tgz#18a236c3fe5a48d24b56d939e6a05488bb682b7e" + integrity sha512-mDSQfqxAlfpeZOLPxLymZkX0hYF3juN57W6vFHTvwKlnHfmh12Pt7hPIRLYIShk8uYRsKPtMTth/EzpwRI+u8w== + +"@next/swc-win32-ia32-msvc@13.5.4": + version "13.5.4" + resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.5.4.tgz#255132243ab6fb20d3c7c92a585e2c4fa50368fe" + integrity sha512-aoqAT2XIekIWoriwzOmGFAvTtVY5O7JjV21giozBTP5c6uZhpvTWRbmHXbmsjZqY4HnEZQRXWkSAppsIBweKqw== + +"@next/swc-win32-x64-msvc@13.5.4": + version "13.5.4" + resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.5.4.tgz#cc542907b55247c5634d9a8298e1c143a1847e25" + integrity sha512-cyRvlAxwlddlqeB9xtPSfNSCRy8BOa4wtMo0IuI9P7Y0XT2qpDrpFKRyZ7kUngZis59mPVla5k8X1oOJ8RxDYg== + +"@popperjs/core@^2.11.6": + version "2.11.8" + resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.8.tgz#6b79032e760a0899cd4204710beede972a3a185f" + integrity sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A== + +"@react-aria/ssr@^3.5.0": + version "3.8.0" + resolved "https://registry.yarnpkg.com/@react-aria/ssr/-/ssr-3.8.0.tgz#e7f467ac42f72504682724304ce221f785d70d49" + integrity sha512-Y54xs483rglN5DxbwfCPHxnkvZ+gZ0LbSYmR72LyWPGft8hN/lrl1VRS1EW2SMjnkEWlj+Km2mwvA3kEHDUA0A== + dependencies: + "@swc/helpers" "^0.5.0" + +"@restart/hooks@^0.4.9": + version "0.4.11" + resolved "https://registry.yarnpkg.com/@restart/hooks/-/hooks-0.4.11.tgz#8876ccce1d4ad2a4b793a31689d63df36cf56088" + integrity sha512-Ft/ncTULZN6ldGHiF/k5qt72O8JyRMOeg0tApvCni8LkoiEahO+z3TNxfXIVGy890YtWVDvJAl662dVJSJXvMw== + dependencies: + dequal "^2.0.3" + +"@restart/ui@^1.6.6": + version "1.6.6" + resolved "https://registry.yarnpkg.com/@restart/ui/-/ui-1.6.6.tgz#3481e2eaf15d7cae55bb2f518624e10d19c75800" + integrity sha512-eC3puKuWE1SRYbojWHXnvCNHGgf3uzHCb6JOhnF4OXPibOIPEkR1sqDSkL643ydigxwh+ruCa1CmYHlzk7ikKA== + dependencies: + "@babel/runtime" "^7.21.0" + "@popperjs/core" "^2.11.6" + "@react-aria/ssr" "^3.5.0" + "@restart/hooks" "^0.4.9" + "@types/warning" "^3.0.0" + dequal "^2.0.3" + dom-helpers "^5.2.0" + uncontrollable "^8.0.1" + warning "^4.0.3" + +"@swc/helpers@0.5.2": + version "0.5.2" + resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.5.2.tgz#85ea0c76450b61ad7d10a37050289eded783c27d" + integrity sha512-E4KcWTpoLHqwPHLxidpOqQbcrZVgi0rsmmZXUle1jXmJfuIf/UWpczUJ7MZZ5tlxytgJXyp0w4PGkkeLiuIdZw== + dependencies: + tslib "^2.4.0" + +"@swc/helpers@^0.5.0": + version "0.5.3" + resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.5.3.tgz#98c6da1e196f5f08f977658b80d6bd941b5f294f" + integrity sha512-FaruWX6KdudYloq1AHD/4nU+UsMTdNE8CKyrseXWEcgjDAbvkwJg2QGPAnfIJLIWsjZOSPLOAykK6fuYp4vp4A== + dependencies: + tslib "^2.4.0" + +"@types/node@^20": + version "20.8.4" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.8.4.tgz#0e9ebb2ff29d5c3302fc84477d066fa7c6b441aa" + integrity sha512-ZVPnqU58giiCjSxjVUESDtdPk4QR5WQhhINbc9UBrKLU68MX5BF6kbQzTrkwbolyr0X8ChBpXfavr5mZFKZQ5A== + dependencies: + undici-types "~5.25.1" + +"@types/prop-types@*": + version "15.7.8" + resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.8.tgz#805eae6e8f41bd19e88917d2ea200dc992f405d3" + integrity sha512-kMpQpfZKSCBqltAJwskgePRaYRFukDkm1oItcAbC3gNELR20XIBcN9VRgg4+m8DKsTfkWeA4m4Imp4DDuWy7FQ== + +"@types/react-dom@^18": + version "18.2.13" + resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.2.13.tgz#89cd7f9ec8b28c8b6f0392b9591671fb4a9e96b7" + integrity sha512-eJIUv7rPP+EC45uNYp/ThhSpE16k22VJUknt5OLoH9tbXoi8bMhwLf5xRuWMywamNbWzhrSmU7IBJfPup1+3fw== + dependencies: + "@types/react" "*" + +"@types/react-transition-group@^4.4.6": + version "4.4.7" + resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.7.tgz#bf69f269d74aa78b99097673ca6dd6824a68ef1c" + integrity sha512-ICCyBl5mvyqYp8Qeq9B5G/fyBSRC0zx3XM3sCC6KkcMsNeAHqXBKkmat4GqdJET5jtYUpZXrxI5flve5qhi2Eg== + dependencies: + "@types/react" "*" + +"@types/react@*", "@types/react@>=16.9.11", "@types/react@^18": + version "18.2.28" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.28.tgz#86877465c0fcf751659a36c769ecedfcfacee332" + integrity sha512-ad4aa/RaaJS3hyGz0BGegdnSRXQBkd1CCYDCdNjBPg90UUpLgo+WlJqb9fMYUxtehmzF3PJaTWqRZjko6BRzBg== + dependencies: + "@types/prop-types" "*" + "@types/scheduler" "*" + csstype "^3.0.2" + +"@types/scheduler@*": + version "0.16.4" + resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.4.tgz#fedc3e5b15c26dc18faae96bf1317487cb3658cf" + integrity sha512-2L9ifAGl7wmXwP4v3pN4p2FLhD0O1qsJpvKmNin5VA8+UvNVb447UDaAEV6UdrkA+m/Xs58U1RFps44x6TFsVQ== + +"@types/warning@^3.0.0": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@types/warning/-/warning-3.0.1.tgz#a62d1d2b7f34376da84ee0afe0145152e62b9699" + integrity sha512-ywJmriP+nvjBKNBEMaNZgj2irZHoxcKeYcyMLbqhYKbDVn8yCIULy2Ol/tvIb37O3IBeZj3RU4tXqQTtGwoAMg== + +anymatch@~3.1.2: + version "3.1.3" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +binary-extensions@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + +bootstrap@^5.3.2: + version "5.3.2" + resolved "https://registry.yarnpkg.com/bootstrap/-/bootstrap-5.3.2.tgz#97226583f27aae93b2b28ab23f4c114757ff16ae" + integrity sha512-D32nmNWiQHo94BKHLmOrdjlL05q1c8oxbtBphQFb9Z5to6eGRDCm0QgeaZ4zFBHzfg2++rqa2JkqCcxDy0sH0g== + +braces@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +busboy@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/busboy/-/busboy-1.6.0.tgz#966ea36a9502e43cdb9146962523b92f531f6893" + integrity sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA== + dependencies: + streamsearch "^1.1.0" + +caniuse-lite@^1.0.30001406: + version "1.0.30001547" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001547.tgz#d4f92efc488aab3c7f92c738d3977c2a3180472b" + integrity sha512-W7CrtIModMAxobGhz8iXmDfuJiiKg1WADMO/9x7/CLNin5cpSbuBjooyoIUVB5eyCc36QuTVlkVa1iB2S5+/eA== + +"chokidar@>=3.0.0 <4.0.0": + version "3.5.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" + integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== + 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" + optionalDependencies: + fsevents "~2.3.2" + +classnames@^2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.3.2.tgz#351d813bf0137fcc6a76a16b88208d2560a0d924" + integrity sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw== + +client-only@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/client-only/-/client-only-0.0.1.tgz#38bba5d403c41ab150bff64a95c85013cf73bca1" + integrity sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA== + +csstype@^3.0.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.2.tgz#1d4bf9d572f11c14031f0436e1c10bc1f571f50b" + integrity sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ== + +dequal@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be" + integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== + +dom-helpers@^5.0.1, dom-helpers@^5.2.0, dom-helpers@^5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-5.2.1.tgz#d9400536b2bf8225ad98fe052e029451ac40e902" + integrity sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA== + dependencies: + "@babel/runtime" "^7.8.7" + csstype "^3.0.2" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +fsevents@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" + integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== + +glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob-to-regexp@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" + integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== + +graceful-fs@^4.1.2: + version "4.2.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== + +immutable@^4.0.0: + version "4.3.4" + resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.3.4.tgz#2e07b33837b4bb7662f288c244d1ced1ef65a78f" + integrity sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA== + +invariant@^2.2.4: + version "2.2.4" + resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" + integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== + dependencies: + loose-envify "^1.0.0" + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-glob@^4.0.1, is-glob@~4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +"js-tokens@^3.0.0 || ^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== + dependencies: + js-tokens "^3.0.0 || ^4.0.0" + +nanoid@^3.3.6: + version "3.3.6" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.6.tgz#443380c856d6e9f9824267d960b4236ad583ea4c" + integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA== + +next@13.5.4: + version "13.5.4" + resolved "https://registry.yarnpkg.com/next/-/next-13.5.4.tgz#7e6a93c9c2b9a2c78bf6906a6c5cc73ae02d5b4d" + integrity sha512-+93un5S779gho8y9ASQhb/bTkQF17FNQOtXLKAj3lsNgltEcF0C5PMLLncDmH+8X1EnJH1kbqAERa29nRXqhjA== + dependencies: + "@next/env" "13.5.4" + "@swc/helpers" "0.5.2" + busboy "1.6.0" + caniuse-lite "^1.0.30001406" + postcss "8.4.31" + styled-jsx "5.1.1" + watchpack "2.4.0" + optionalDependencies: + "@next/swc-darwin-arm64" "13.5.4" + "@next/swc-darwin-x64" "13.5.4" + "@next/swc-linux-arm64-gnu" "13.5.4" + "@next/swc-linux-arm64-musl" "13.5.4" + "@next/swc-linux-x64-gnu" "13.5.4" + "@next/swc-linux-x64-musl" "13.5.4" + "@next/swc-win32-arm64-msvc" "13.5.4" + "@next/swc-win32-ia32-msvc" "13.5.4" + "@next/swc-win32-x64-msvc" "13.5.4" + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== + +picocolors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== + +picomatch@^2.0.4, picomatch@^2.2.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +postcss@8.4.31: + version "8.4.31" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.31.tgz#92b451050a9f914da6755af352bdc0192508656d" + integrity sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ== + dependencies: + nanoid "^3.3.6" + picocolors "^1.0.0" + source-map-js "^1.0.2" + +prop-types-extra@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/prop-types-extra/-/prop-types-extra-1.1.1.tgz#58c3b74cbfbb95d304625975aa2f0848329a010b" + integrity sha512-59+AHNnHYCdiC+vMwY52WmvP5dM3QLeoumYuEyceQDi9aEhtwN9zIQ2ZNo25sMyXnbh32h+P1ezDsUpUH3JAew== + dependencies: + react-is "^16.3.2" + warning "^4.0.0" + +prop-types@^15.6.2, prop-types@^15.8.1: + version "15.8.1" + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" + integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== + dependencies: + loose-envify "^1.4.0" + object-assign "^4.1.1" + react-is "^16.13.1" + +react-bootstrap@^2.9.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/react-bootstrap/-/react-bootstrap-2.9.0.tgz#10493a3bb7c0429fee886f5571b195ece6c436f0" + integrity sha512-dGh6fGjqR9MBzPOp2KbXJznt1Zy6SWepXYUdxMT18Zu/wJ73HCU8JNZe9dfzjmVssZYsJH9N3HHE4wAtQvNz7g== + dependencies: + "@babel/runtime" "^7.22.5" + "@restart/hooks" "^0.4.9" + "@restart/ui" "^1.6.6" + "@types/react-transition-group" "^4.4.6" + classnames "^2.3.2" + dom-helpers "^5.2.1" + invariant "^2.2.4" + prop-types "^15.8.1" + prop-types-extra "^1.1.0" + react-transition-group "^4.4.5" + uncontrollable "^7.2.1" + warning "^4.0.3" + +react-dom@^18: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d" + integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g== + dependencies: + loose-envify "^1.1.0" + scheduler "^0.23.0" + +react-icons@^4.11.0: + version "4.11.0" + resolved "https://registry.yarnpkg.com/react-icons/-/react-icons-4.11.0.tgz#4b0e31c9bfc919608095cc429c4f1846f4d66c65" + integrity sha512-V+4khzYcE5EBk/BvcuYRq6V/osf11ODUM2J8hg2FDSswRrGvqiYUYPRy4OdrWaQOBj4NcpJfmHZLNaD+VH0TyA== + +react-is@^16.13.1, react-is@^16.3.2: + version "16.13.1" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" + integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== + +react-lifecycles-compat@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362" + integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA== + +react-transition-group@^4.4.5: + version "4.4.5" + resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.4.5.tgz#e53d4e3f3344da8521489fbef8f2581d42becdd1" + integrity sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g== + dependencies: + "@babel/runtime" "^7.5.5" + dom-helpers "^5.0.1" + loose-envify "^1.4.0" + prop-types "^15.6.2" + +react@^18: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5" + integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ== + dependencies: + loose-envify "^1.1.0" + +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + dependencies: + picomatch "^2.2.1" + +regenerator-runtime@^0.14.0: + version "0.14.0" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz#5e19d68eb12d486f797e15a3c6a918f7cec5eb45" + integrity sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA== + +sass@^1.69.2: + version "1.69.2" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.69.2.tgz#8aeaeb6c1dcdbeaa26bbfeddece67c9fcd4b1d93" + integrity sha512-48lDtG/9OuSQZ9oNmJMUXI2QdCakAWrAGjpX/Fy6j4Og8dEAyE598x5GqCqnHkwV7+I5w8DJpqjm581q5HNh3w== + dependencies: + chokidar ">=3.0.0 <4.0.0" + immutable "^4.0.0" + source-map-js ">=0.6.2 <2.0.0" + +scheduler@^0.23.0: + version "0.23.0" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.0.tgz#ba8041afc3d30eb206a487b6b384002e4e61fdfe" + integrity sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw== + dependencies: + loose-envify "^1.1.0" + +"source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" + integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== + +streamsearch@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-1.1.0.tgz#404dd1e2247ca94af554e841a8ef0eaa238da764" + integrity sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg== + +styled-jsx@5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/styled-jsx/-/styled-jsx-5.1.1.tgz#839a1c3aaacc4e735fed0781b8619ea5d0009d1f" + integrity sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw== + dependencies: + client-only "0.0.1" + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +tslib@^2.4.0: + version "2.6.2" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" + integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== + +typescript@^5: + version "5.2.2" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.2.2.tgz#5ebb5e5a5b75f085f22bc3f8460fba308310fa78" + integrity sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w== + +uncontrollable@^7.2.1: + version "7.2.1" + resolved "https://registry.yarnpkg.com/uncontrollable/-/uncontrollable-7.2.1.tgz#1fa70ba0c57a14d5f78905d533cf63916dc75738" + integrity sha512-svtcfoTADIB0nT9nltgjujTi7BzVmwjZClOmskKu/E8FW9BXzg9os8OLr4f8Dlnk0rYWJIWr4wv9eKUXiQvQwQ== + dependencies: + "@babel/runtime" "^7.6.3" + "@types/react" ">=16.9.11" + invariant "^2.2.4" + react-lifecycles-compat "^3.0.4" + +uncontrollable@^8.0.1: + version "8.0.4" + resolved "https://registry.yarnpkg.com/uncontrollable/-/uncontrollable-8.0.4.tgz#a0a8307f638795162fafd0550f4a1efa0f8c5eb6" + integrity sha512-ulRWYWHvscPFc0QQXvyJjY6LIXU56f0h8pQFvhxiKk5V1fcI8gp9Ht9leVAhrVjzqMw0BgjspBINx9r6oyJUvQ== + +undici-types@~5.25.1: + version "5.25.3" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.25.3.tgz#e044115914c85f0bcbb229f346ab739f064998c3" + integrity sha512-Ga1jfYwRn7+cP9v8auvEXN1rX3sWqlayd4HP7OKk4mZWylEmu3KzXDUGrQUN6Ol7qo1gPvB2e5gX6udnyEPgdA== + +warning@^4.0.0, warning@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/warning/-/warning-4.0.3.tgz#16e9e077eb8a86d6af7d64aa1e05fd85b4678ca3" + integrity sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w== + dependencies: + loose-envify "^1.0.0" + +watchpack@2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.0.tgz#fa33032374962c78113f93c7f2fb4c54c9862a5d" + integrity sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg== + dependencies: + glob-to-regexp "^0.4.1" + graceful-fs "^4.1.2"