diff --git a/.env.local.example b/.env.local.example new file mode 100644 index 0000000..de50d8e --- /dev/null +++ b/.env.local.example @@ -0,0 +1,9 @@ +# required fields +# used for meta tags. e.g: 'https://libremdb.iket.me' don't add end slash. +NEXT_PUBLIC_URL= + +# optional fields. uncomment them and add the values if you wish so. +# default useragent for requesting data from imdb is 'axios/0.27.2' +# AXIOS_USERAGENT= +# default accept header is 'application/json, text/plain, */*' +# AXIOS_ACCEPT= diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 0000000..5ad64cf --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,7 @@ +{ + "extends": "next/core-web-vitals", + "rules": { + "react/no-unescaped-entities": "off", + "@next/next/no-page-custom-font": "off" + } +} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 6c382a5..bffcf52 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -3,6 +3,7 @@ on: push: branches: - main + - next jobs: changelog-and-release: diff --git a/.gitignore b/.gitignore index 8c56aae..a36f111 100644 --- a/.gitignore +++ b/.gitignore @@ -1,21 +1,34 @@ -#big stuff -node_modules/ -.cache/ -.parcel-cache/ +# dependencies +/node_modules +/.pnp +.pnp.js -# env variables -*.env +# testing +/coverage -# CSS files -public/css/*.css -public/css/*.css.map +# next.js +/.next/ +/out/ -#misc stuff -fetchers/* -!fetchers/movie.js -controllers/movieControllers.js -routes/movieRoutes.js -views/pug/homepage.pug -views/pug/movies.pug -views/pug/_card.pug -utils/constants.js \ No newline at end of file +# production +/build + +# misc +.DS_Store +*.pem + +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* +.pnpm-debug.log* + +# local env files +.env*.local + +# typescript +*.tsbuildinfo + next-env.d.ts + +#just dev stuff +dev/* diff --git a/README.md b/README.md index 50e4bb4..0ae3cf4 100644 --- a/README.md +++ b/README.md @@ -1,61 +1,58 @@ # libremdb -A FOSS alternative front-end to IMDb. +A free & open source IMDb front-end. Inspired by projects like [teddit](https://codeberg.org/teddit/teddit), [nitter](https://github.com/zedeus/nitter) and [many others](#similar-projects). -
- +_(This is a rewrite of libremdb in Next.js. The information below corresponds to this branch only. I'll make this branch default sometime later.)_ +| | | +| -------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------ | +| | | --- -## Features +## Some Features - No ads or tracking Browse any movie info without being tracked or bombarded by annoying ads. -- No connection to IMDb - All requests go through the backend; client never talks to IMDb except for a bunch of requests to `m.media-amazon.com` for images. -- No JavaScript required - Just a few linesof code(~30) to save theme preference, which itself is optional. - Modern interface Modern interface with curated colors supporting both dark and light themes. - Responsive design Be it your small mobile or big computer screen, it's fully responsive. - Lightweight _[Up movie page](https://imdb.com/title/tt1049413/)_ - | | libremdb | IMDb | - | --------------- | -------- | ------ | - | no. of requests | ~35 | ~280 | - | data consumed | 1.35MB | 7.75MB | + (tested on Firefox v104; without scroll; simulated regular 4g) + + | Network tab stats | libremdb | IMDb | + | ------------------------ | -------- | ------ | + | no. of requests | 22 | 180 | + | data transfered(gzipped) | 468KB | 1.88MB | + | load event fired in | 6.22s | 10.01s | --- ## Instances -| Instance URL | Region | Notes | -| -------------------------------- | ------------- | --------------------------------------------------------- | -| https://libremdb.herokuapp.com | United States | Official; Hosted on Heroku | -| https://libremdb.pussthecat.org | Germany | Operated by [PussTheCat.org](https://pussthecat.org/) | -| https://libremdbeu.herokuapp.com | Europe | Operated by [toyboatcash](https://github.com/toyboatcash) | -| https://lmdb.tokhmi.xyz/ | U.S. | Operated by [Tokhmi](https://tokhmi.xyz) | -| https://libremdb.esmailelbob.xyz/ | Canada | Operated by [Esmail EL BoB](https://esmailelbob.xyz) | -| http://libremdb.lqs5fjmajyp7rvp4qvyubwofzi6d4imua7vs237rkc4m5qogitqwrgyd.onion/ | Canada | Operated by [Esmail EL BoB](https://esmailelbob.xyz) | +| Instance URL | Region | Notes | +| ------------------------ | ------ | -------------- | +| https://libremdb.iket.me | Canada | Operated by me | --- -## FAQs +## Questions you might have - Why is it so slow? Whenever you request info about a movie/show on libremdb, 4 trips are made(2 between your browser and libremdb's server, and 2 between libremdb's server and IMDb's server) instead of the usual 2 trips when you visit a website. For this reason there's a noticable delay. This is a bit of inconvenience you'll have to face should you wish to use this website. - It doesn't have all routes. - I think most of the people just check IMDb to get a quick glimpse of a movie/show. That's why there is just one route for now. However, I will try to implement other important routes if time allows. Keep an eye on [To-Do](#to-do) section. + I'll implement more with time :) -- Why is it connecting to `m.media-amazon.com`? - For now, images are directly served from amazon. If I have enough time in the future, I'll implement a way to serve the images from libremdb instead. +- I see connection being made to some Amazon domains. + For now, images and videos are directly served from Amazon. If I have enough time in the future, I'll implement a way to serve the images from libremdb instead. -- Will amazon track me then? - They may log your IP address. I'd recommend using a VPN for mitigating this risk. +- Will Amazon track me then? + They may log your IP address, useragent, and other such + identifiers. I'd recommend using a VPN, or accessing the website through TOR for mitigating this risk. - Why not just use IMDb? Refer to the [features section](#features) above. @@ -66,12 +63,14 @@ Inspired by projects like [teddit](https://codeberg.org/teddit/teddit), [nitter] ## Privacy -In short: libremdb doesn't collect any data at all. +- Information collected: + None. -- Data you directly provide: None. -- Data you passively provide: A stack trace is logged to console on the server if you hit some error route. -- Data stored in your browser: To remember theme preferences, the website stores a key named 'theme' in Local Storage provided by your browser. Apart from that, there is nothing stored in your browser. -- Data collected by other services: libremdb connects to `m.media-amazon.com` for fetching images. So, Amazon might log your IP address. If you use the official instance which is deployed on Heroku, then Heroku might also log you IP address. You're advised to follow due precaution. +- Information stored in your browser: + A key named 'theme' is stored in Local Storage provided by your browser, if you ever override the default theme. To remove it, go to site data settings, and clear the data for this website. To permamently disable libremdb from storing your theme prefrences, either turn off JavaScript or disable access to Local Storage for libremdb. + +- Information collected by other services: + libremdb connects to 'media-amazon.com' and 'media-imdb.com' for fetching images and videos. So, Amazon might log your IP address, and other information(such as http headers) sent by your browser. --- @@ -80,21 +79,23 @@ In short: libremdb doesn't collect any data at all. ### soon - [ ] add advanced search route -- [ ] add did you know and reviews on movie info page +- [x] add did you know and reviews on movie info page - [ ] implement routes for reviews, quotes, goofs, trivia and crazy credits ### at a later stage - [ ] use redis -- [x] implement a better installation method +- [ ] implement a better installation method - [ ] serve images from libremdb itself -- [ ] add a way to see trailer and other videos +- [x] add a way to see trailer and other videos - [ ] implement other trivial routes --- ## Installation +As libremdb is made with Next.js, you can deploy it anywhere where Next.js is supported. Below are a few other methods: + ### Manual 1. Install Node.js and Git. @@ -104,11 +105,13 @@ In short: libremdb doesn't collect any data at all. 2. Clone and set up the repo. ```bash - git clone https://github.com/zyachel/libremdb.git # replace gituhb.com with codeberg.org if you wish so. + git clone https://github.com/zyachel/libremdb.git # replace github.com with codeberg.org if you wish so. cd libremdb - cp config.env.template config.env # you can make necessary changes - # if you use npm, change 'pnpm' to 'npm run' here as well as in package.json + # optional configuration + cp .env.local.example .env.local + # replace 'pnpm' with yarn or npm if you use those pnpm install + pnpm build pnpm start ``` @@ -116,7 +119,7 @@ libremdb will start running at http://localhost:3000. ### Docker -There's a [docker image](https://github.com/PussTheCat-org/docker-libremdb-quay) made by [@TheFrenchGhosty](https://github.com/TheFrenchGhosty) for [PussTheCat.org's instance](https://libremdb.pussthecat.org). You can use that in case you wish to use docker. +No image available yet. --- @@ -124,21 +127,17 @@ There's a [docker image](https://github.com/PussTheCat-org/docker-libremdb-quay) ### Automatic redirection -Use any of these extensions to automatically redirect IMDb URLs to libremdb: - - [Redirector](https://github.com/einaregilsson/Redirector) config: ``` Description: redirect IMDb to libremdb Example URL: https://www.imdb.com/title/tt0258463/?ref_=tt_sims_tt_t_4 - Include pattern: https?:\/\/(www\.)?imdb\.com\/title\/([^\?]*) - Redirect to: https://libremdb.herokuapp.com/title/$2 + Include pattern: https?:\/\/(www\.)?imdb\.com\/([^\?]*) + Redirect to: https://libremdb.iket.me/$2 Pattern type: Regular Expression ``` -- [LibRedirect](https://github.com/libredirect/libredirect/) - ### Similar projects - [Teddit](https://codeberg.org/teddit/teddit) @@ -159,10 +158,7 @@ Use any of these extensions to automatically redirect IMDb URLs to libremdb: ## Contact -| \[matrix\] | email | -| :--------------------------------------------------------: | :------------------------------------------------------: | -| | | -| [@ninal:matrix.org](https://matrix.to/#/@ninal:matrix.org) | [aricla@protonmail.com](mailto:aricla@protonmail.com) | +I'm availabe on [[matrix]](https://matrix.to/#/@ninal:matrix.org) and [email](mailto:aricla@protonmail.com) in case you wish to contact me personally. --- diff --git a/app.js b/app.js deleted file mode 100644 index d9e4cd0..0000000 --- a/app.js +++ /dev/null @@ -1,69 +0,0 @@ -const express = require('express'); -const path = require('path'); -const morgan = require('morgan'); -const helmet = require('helmet'); -const compression = require('compression'); -const dotenv = require('dotenv'); - -const viewRouter = require('./routes/viewRoutes'); -const globalErrorHandler = require('./controllers/errorControllers'); -const { AppError } = require('./utils/errorUtils'); - -const app = express(); - -//---------------------------------------------------------------------------// -// LOADING CONFIG FILE VARIABLES -//---------------------------------------------------------------------------// -dotenv.config({ path: './config.env' }); // loading .env variables - -//-------------------------------------------------------------------------// -// GLOBAL MIDDLEWARES -//-------------------------------------------------------------------------// - -app.use(compression()); // for compressing response bodies -app.use( - // for making the app more secure by setting some security headers(like CORS) - helmet({ - contentSecurityPolicy: { - directives: { - // only allowing images from 'm.media-amazon.com' as crossorigin - 'img-src': ["'self'", 'm.media-amazon.com'], - }, - }, - // 'crossorigin' attribute is needed in the img tag where images are fetched from 'm.media-amazon.com' if the policy below is set to true. See https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cross-Origin-Embedder-Policy for more details - crossOriginEmbedderPolicy: false, - }) -); - -app.set('view engine', 'pug'); // setting pug as a view engine -app.set('views', path.join(__dirname, 'views/pug')); // directory from where html template will be sourced - -app.use( - express.static(path.join(__dirname, 'public'), { - maxAge: process.env.CACHE_PERIOD || '1h', - }) -); // directory from where files like css, images, fonts, will be sourced - -if (process.env.NODE_ENV === 'development') app.use(morgan('dev')); // for logging requests -// app.use(express.json({ limit: '3mb' })); // for parsing json - -//-------------------------------------------------------------------------// -// ROUTER MIDDLEWARES -//-------------------------------------------------------------------------// -// app.use('/api/v1/movies', movieRouter); // sub-router for movie related endpoints -app.use('/', viewRouter); // for html pages - -//-------------------------------------------------------------------------// -// GLOBAL ERROR HANDLING -//-------------------------------------------------------------------------// -app.all('*', (req, res, next) => { - next( - new AppError( - `the route you requested(${req.originalUrl}) doesn't exist`, - 404 - ) - ); -}); -app.use(globalErrorHandler); // handling errors in every middleware - -module.exports = app; diff --git a/config.env.template b/config.env.template deleted file mode 100644 index 991e280..0000000 --- a/config.env.template +++ /dev/null @@ -1,10 +0,0 @@ -# default port is 3000 -PORT=3000 -# url -URL=http://localhost:3000 -# enviorment -NODE_ENV=production -# change image quality -IMAGE_QUALITY=500 -# cache duration for static assets(eg: '2.5 days', 3600, 2m) -CACHE_PERIOD=1h \ No newline at end of file diff --git a/controllers/errorControllers.js b/controllers/errorControllers.js deleted file mode 100644 index a682190..0000000 --- a/controllers/errorControllers.js +++ /dev/null @@ -1,94 +0,0 @@ -const { AppError } = require('../utils/errorUtils'); - -//----------------------------------------------------------------------------------------------------------// -// ERROR HANDLING FUNCTIONS ACC TO ENVIRONMENTS -//----------------------------------------------------------------------------------------------------------// -// for errors during development -const devErrorHandler = (err, req, res) => { - req.originalUrl.startsWith('/api/') - ? // 1) FOR API - res.status(err.statusCode).json({ - status: err.status, - message: err.message, - stack: err.stack, - err, - }) - : // 2) FOR RENDERED PAGES - res.render('error', { - title: 'an error occured', - page: 'error', - message: err.message, - statusCode: err.statusCode, - stack: err.stack, - }); -}; - -// for errors during production -const prodErrorHandler = (err, req, res) => { - if (req.originalUrl.startsWith('/api/')) - // 1) FOR API - // for trusted, operational errors - err.isOperational - ? res - .status(err.statusCode) - .json({ status: err.status, message: err.message }) - : // for untrusted errors sending a generic message - res - .status(500) - .json({ status: 'fail', message: 'something went wrong!' }); - - // 2) FOR RENDERED PAGES - err.isOperational - ? res.render('error', { - title: 'something went wrong', - page: 'error', - message: err.message, - statusCode: err.statusCode, - }) - : res.render('error', { - title: 'an error occured', - page: 'error', - message: 'something went wrong!', - statusCode: 500, - }); - // err; -}; - -//-------------------------------------------------------------------------------------------------------------// -// MAIN EXPRESS ERROR HANDLING MIDDLEWARE -//-------------------------------------------------------------------------------------------------------------// -const globalErrorHandler = (err, req, res, next) => { - // setting some defaults on the error in case they don't exist already - err.statusCode = err.statusCode || 500; - err.status = err.status || 'error'; - - // logging error to the console - console.log('\x1b[31m%s\x1b[0m', '🔴️ ERROR:', err); // with red color - - // sending error to the client - // for dev environment - if (process.env.NODE_ENV === 'development') devErrorHandler(err, req, res); - // for prod environment - else if (process.env.NODE_ENV === 'production') { - let error = { ...err }; - - // marking some special errors as operational - // axios errors - if (err.isAxiosError) { - // if connection can't be established to imdb for some reason - if (err.code === 'ENETUNREACH' || err.code === 'ENOTFOUND') - error = new AppError( - 'there was some problem fetching data from IMDb', - 500 - ); - - // in case the url is wrong(like bad title id) - if (err.response) - error = new AppError(err.response.statusText, err.response.status); - } - - prodErrorHandler(error, req, res); - } -}; - -module.exports = globalErrorHandler; diff --git a/controllers/viewControllers.js b/controllers/viewControllers.js deleted file mode 100644 index 0f519c5..0000000 --- a/controllers/viewControllers.js +++ /dev/null @@ -1,73 +0,0 @@ -const { AppError, catchErrors } = require('../utils/errorUtils'); -// const { genres, popularGenres } = require('../utils/constants'); -const getMovie = require('../fetchers/movie'); - -exports.overview = (req, res, next) => res.redirect(301, '/about'); - -exports.about = catchErrors(async (req, res, next) => { - res.render('about', { title: 'About', page: 'About' }); -}); - -exports.privacy = catchErrors(async (req, res, next) => { - res.render('privacy', { title: 'Privacy', page: 'Privacy' }); -}); - -exports.contact = catchErrors(async (req, res, next) => { - res.render('contact', { title: 'Contact', page: 'Contact' }); -}); - -exports.similarProjects = catchErrors(async (req, res, next) => { - res.render('similarProjects', { - title: 'Similar Projects', - page: 'Similar Projects', - }); -}); - -exports.movie = catchErrors(async (req, res, next) => { - const movie = await getMovie(req.params.title, +process.env.IMAGE_QUALITY); - res.render('movie', { - movie, - title: movie.basic.name, - page: movie.basic.name, - }); -}); - -/* -exports.searchGenres = catchErrors(async (req, res, next) => { - // fetching top 10 rated movies to show in homepage - let movies; - const genresQueriedStr = req.query.genres; - const genresQueriedArr = genresQueriedStr?.split(','); - - if (!genresQueriedArr) { - movies = await moviesDataFetcher('sci-fi,action'); - return res.render('homepage', { - title: 'Home Page', - page: 'Home Page', - movies: movies.slice(-10), - genres, - popularGenres, - }); - } - - const numResults = +req.query.results || 10; - const numPage = +req.query.page || 1; - const resultsToskip = numResults * (numPage - 1); - - movies = await moviesDataFetcher(genresQueriedStr); - movies = movies.slice(resultsToskip, resultsToskip + numResults); - const totalNumResults = movies.length; - - if (!movies.length) return next(new AppError('no movies found', 404)); - - const [curPage, totalPages] = [numPage, totalNumResults / numResults]; - res.render('movies', { - title: genresQueriedArr.join(', '), - page: 'Movies', - genres: genresQueriedArr, - movies, - curPage, - totalPages, - }); -}); -*/ diff --git a/fetchers/movie.js b/fetchers/movie.js deleted file mode 100644 index 19e6041..0000000 --- a/fetchers/movie.js +++ /dev/null @@ -1,256 +0,0 @@ -const cheerio = require('cheerio'); -const axiosInstance = require('../utils/axiosInstance'); - -// cleans images links and adds custom quality(optional). -const cleanLink = (link, quality = null) => { - if (!link) return ''; - let cleanedLink = link.match( - /https:\/\/m\.media-amazon\.com\/images\/M\/[^.]*/gm - )?.[0]; - if (!cleanedLink) return ''; - cleanedLink += quality ? `.UX${quality}.jpeg` : '.jpeg'; - return cleanedLink; -}; - -const getMovie = async (title, quality = null) => { - try { - const res = await axiosInstance(`/title/${title}`); - - const $ = cheerio.load(res.data); - - // basic info - const name = $('h1').text(); - const metadata = $('ul[data-testid=hero-title-block__metadata] li') - .map((i, el) => - $(el).children().length ? $(el).children().first().text() : $(el).text() - ) - .toArray(); - const rating = $('[data-testid=hero-rating-bar__aggregate-rating__score]') - .children() - .first() - .text(); - const numVotes = $('[data-testid=hero-rating-bar__aggregate-rating__score]') - .siblings() - .last() - .text(); - const popularity = $('[data-testid="hero-rating-bar__popularity__score"]') - .first() - .text(); - const plotBrief = $('span[data-testid=plot-xl]').contents().first().text(); - let poster = $('[data-testid="hero-media__poster"] img').attr('src'); - poster = cleanLink(poster, quality); - const reviewScores = []; - $( - 'ul[data-testid="reviewContent-all-reviews"] li a span.three-Elements' - ).each((i, el) => - reviewScores.push([ - $(el).children().first().text(), - $(el).children().last().text(), - ]) - ); - - // media - const images = $('section[data-testid="Photos"] .ipc-photo img') - .map((i, el) => { - let image = $(el).attr('src'); - return cleanLink(image, quality); - }) - .toArray(); - const imagesLinkExternal = $('[data-testid=photos-title]').attr('href'); - const videoThumbnail = $('.ipc-slate__slate-image img').attr('src'); - const videoLinkExternal = $('.hero-media__slate-overlay').attr('href'); - const videosLinkExternal = $('[data-testid=videos-title]').attr('href'); - - // cast - const actors = $( - 'section[data-testid="title-cast"] div[data-testid=title-cast-item]' - ) - .map((i, el) => { - const name = $(el) - .find('a[data-testid="title-cast-item__actor"]') - .text(); - let avatar = $(el).find('img').attr('src'); - avatar = cleanLink(avatar, quality); - const characterName = $(el) - .find('a[data-testid=cast-item-characters-link] span') - .first() - .text(); - - return { name, avatar, characterName }; - }) - .toArray(); - const directors = $( - 'section[data-testid=title-cast] ul li:nth-of-type(1) li' - ) - .map((i, el) => $(el).find('a').text()) - .toArray(); - const writers = $('section[data-testid=title-cast] ul li:nth-of-type(2) li') - .map((i, el) => $(el).find('a').text()) - .toArray(); - - // storyline - const plotExpanded = $( - 'section[data-testid="Storyline"] [data-testid=storyline-plot-summary]' - ) - .contents() - .first() - .text(); - const tagline = $( - 'section[data-testid="Storyline"] [data-testid=storyline-taglines] li' - ) - .first() - .text(); - const genres = $( - 'section[data-testid="Storyline"] [data-testid=storyline-genres] li' - ) - .map((i, el) => $(el).text()) - .toArray(); - const parentalGuidance = $( - '[data-testid="storyline-certificate"] li' - ).text(); - - // reviews - const reviewSummary = $( - 'section[data-testid="UserReviews"] span[data-testid="review-summary"]' - ).text(); - const reviewRating = $( - 'section[data-testid="UserReviews"] div[data-testid="review-featured-header"]' - ) - .children() - .last() - .text(); - const reviewComment = $( - 'section[data-testid="UserReviews"] div[data-testid="review-overflow"]' - ).text(); - - // details - const releaseDate = $( - 'section[data-testid="Details"] li[data-testid="title-details-releasedate"] li' - ).text(); - const countries = $( - 'section[data-testid="Details"] li[data-testid="title-details-origin"] li' - ) - .map((i, el) => $(el).text()) - .toArray(); - const officialSite = $( - 'section[data-testid="Details"] li[data-testid="title-details-officialsites"] li a' - ) - .first() - .attr('href'); - const languages = $( - 'section[data-testid="Details"] li[data-testid="title-details-languages"] li' - ) - .map((i, el) => $(el).text()) - .toArray(); - const alternateTitle = $( - 'section[data-testid="Details"] li[data-testid="title-details-akas"] li' - ) - .first() - .text(); - const filmingLocations = $( - 'section[data-testid="Details"] li[data-testid="title-details-filminglocations"] li' - ) - .map((i, el) => $(el).text()) - .toArray(); - const companies = $( - 'section[data-testid="Details"] li[data-testid="title-details-companies"] li' - ) - .map((i, el) => $(el).text()) - .toArray(); - - // technical specs - const runtime = $( - 'section[data-testid="TechSpecs"] li[data-testid="title-techspec_runtime"] div' - ).text(); - const color = $( - 'section[data-testid="TechSpecs"] li[data-testid="title-techspec_color"] div' - ).text(); - const aspectRatio = $( - 'section[data-testid="TechSpecs"] li[data-testid="title-techspec_aspectratio"] div' - ).text(); - const sound = $( - 'section[data-testid="TechSpecs"] li[data-testid="title-techspec_soundmix"] li' - ) - .map((i, el) => $(el).text()) - .toArray(); - - // boxoffice - const budget = $( - 'section[data-testid="BoxOffice"] [data-testid="title-boxoffice-section"] li[data-testid="title-boxoffice-budget"] li' - ).text(); - const grossDomestic = $( - 'section[data-testid="BoxOffice"] [data-testid="title-boxoffice-section"] li[data-testid="title-boxoffice-grossdomestic"] li' - ).text(); - const openingWeekendDomestic = $( - 'section[data-testid="BoxOffice"] [data-testid="title-boxoffice-section"] li[data-testid="title-boxoffice-openingweekenddomestic"] li' - ) - .map((i, el) => $(el).text()) - .toArray(); - const grossWorldwide = $( - 'section[data-testid="BoxOffice"] [data-testid="title-boxoffice-section"] li[data-testid="title-boxoffice-cumulativeworldwidegross"] li' - ).text(); - - // making data object - const data = { - basic: { - name, - poster, - metadata, - rating, - numVotes, - popularity, - genres, - plotBrief, - directors, - writers, - }, - media: { - poster, - images, - imagesLinkExternal, - videoThumbnail, - videoLinkExternal, - videosLinkExternal, - }, - topCast: { actors, directors, writers }, - storyline: { plotExpanded, tagline, genres, parentalGuidance }, - details: { - releaseDate, - countries, - officialSite, - languages, - alternateTitle, - filmingLocations, - companies, - }, - technicalSpecs: { - runtime, - color, - aspectRatio, - sound, - }, - boxoffice: { - budget, - openingWeekendDomestic, - grossDomestic, - grossWorldwide, - }, - reviews: { - reviewScores, - review: { - reviewComment, - reviewSummary, - reviewRating, - }, - }, - }; - - // returning data - return data; - } catch (err) { - console.log(err.response); - throw err; - } -}; - -module.exports = getMovie; diff --git a/next-env.d.ts b/next-env.d.ts new file mode 100644 index 0000000..4f11a03 --- /dev/null +++ b/next-env.d.ts @@ -0,0 +1,5 @@ +/// +/// + +// NOTE: This file should not be edited +// see https://nextjs.org/docs/basic-features/typescript for more information. diff --git a/next.config.mjs b/next.config.mjs new file mode 100644 index 0000000..3001dee --- /dev/null +++ b/next.config.mjs @@ -0,0 +1,25 @@ +/** @type {import('next').NextConfig} */ +const nextConfig = { + reactStrictMode: true, + swcMinify: true, + async redirects() { + return [ + { + source: '/', + destination: '/about', + permanent: true, + }, + ]; + }, + images: { + domains: ['m.media-amazon.com'], + }, + experimental: { + images: { + allowFutureImage: true, + }, + isrMemoryCacheSize: 20 * 1024 * 1024, + }, +}; + +export default nextConfig; diff --git a/package.json b/package.json index fac20ab..18e4263 100644 --- a/package.json +++ b/package.json @@ -1,47 +1,36 @@ { "name": "libremdb", "version": "0.1.2", - "description": "a FOSS alternative front-end to IMDb", - "main": "server.js", - "scripts": { - "sass:watch": "sass views/sass/main.scss public/css/styles.css --watch", - "sass:build": "sass views/sass/main.scss public/css/styles.css --style=compressed", - "prod": " (nodemon server.js) & (pnpm sass:watch)", - "dev": " (NODE_ENV=development nodemon server.js) & (pnpm sass:watch)", - "start": "(mkdir -p public/css) && (npm run sass:build) && (node server.js)" - }, + "description": "a free & open source IMDb front-end", + "private": true, + "type": "module", "author": "libremdb-contributors", "license": "AGPL-3.0-or-later", + "scripts": { + "dev": "next dev", + "build": "next build", + "start": "next start", + "lint": "next lint" + }, "dependencies": { "axios": "^0.27.2", - "cheerio": "1.0.0-rc.11", - "compression": "^1.7.4", - "dotenv": "^16.0.1", - "express": "^4.18.1", - "helmet": "^5.1.0", - "morgan": "^1.10.0", - "pug": "^3.0.2", - "sass": "^1.52.2" + "cheerio": "1.0.0-rc.12", + "next": "12.2.5", + "react": "18.2.0", + "react-dom": "18.2.0", + "sharp": "^0.31.0" }, "devDependencies": { - "@types/express": "^4.17.13", - "@types/morgan": "^1.9.3", - "nodemon": "^2.0.16" - }, - "nodemonConfig": { - "ignore": [ - "node_modules/*", - "public/*" - ] + "@types/node": "18.7.3", + "@types/react": "18.0.17", + "@types/react-dom": "18.0.6", + "eslint": "8.22.0", + "eslint-config-next": "12.2.5", + "sass": "^1.54.4", + "typescript": "4.7.4" }, "engines": { - "node": ">= 16.5.0", - "npm": ">= 8.5.5", - "pnpm": "^7.1.8" - }, - "pnpm": { - "overrides": { - "json-schema@<0.4.0": ">=0.4.0" - } + "node": ">=16.5.0", + "pnpm": ">=7.0.0" } -} \ No newline at end of file +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8cc5d58..0532c6c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,166 +1,361 @@ lockfileVersion: 5.4 -overrides: - json-schema@<0.4.0: '>=0.4.0' - specifiers: - '@types/express': ^4.17.13 - '@types/morgan': ^1.9.3 + '@types/node': 18.7.3 + '@types/react': 18.0.17 + '@types/react-dom': 18.0.6 axios: ^0.27.2 - cheerio: 1.0.0-rc.11 - compression: ^1.7.4 - dotenv: ^16.0.1 - express: ^4.18.1 - helmet: ^5.1.0 - morgan: ^1.10.0 - nodemon: ^2.0.16 - pug: ^3.0.2 - sass: ^1.52.2 + cheerio: 1.0.0-rc.12 + eslint: 8.22.0 + eslint-config-next: 12.2.5 + next: 12.2.5 + react: 18.2.0 + react-dom: 18.2.0 + sass: ^1.54.4 + sharp: ^0.31.0 + typescript: 4.7.4 dependencies: axios: 0.27.2 - cheerio: 1.0.0-rc.11 - compression: 1.7.4 - dotenv: 16.0.1 - express: 4.18.1 - helmet: 5.1.0 - morgan: 1.10.0 - pug: 3.0.2 - sass: 1.52.2 + cheerio: 1.0.0-rc.12 + next: 12.2.5_ivfob5dyaiglqb5g2zdrumbbbm + react: 18.2.0 + react-dom: 18.2.0_react@18.2.0 + sharp: 0.31.0 devDependencies: - '@types/express': 4.17.13 - '@types/morgan': 1.9.3 - nodemon: 2.0.16 + '@types/node': 18.7.3 + '@types/react': 18.0.17 + '@types/react-dom': 18.0.6 + eslint: 8.22.0 + eslint-config-next: 12.2.5_4rv7y5c6xz3vfxwhbrcxxi73bq + sass: 1.54.4 + typescript: 4.7.4 packages: - /@babel/helper-validator-identifier/7.16.7: - resolution: {integrity: sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==} - engines: {node: '>=6.9.0'} - dev: false - - /@babel/parser/7.18.4: - resolution: {integrity: sha512-FDge0dFazETFcxGw/EXzOkN8uJp0PC7Qbm+Pe9T+av2zlBpOgunFHkQPPn+eRuClU73JF+98D531UgayY89tow==} - engines: {node: '>=6.0.0'} - hasBin: true - dependencies: - '@babel/types': 7.18.4 - dev: false - - /@babel/types/7.18.4: - resolution: {integrity: sha512-ThN1mBcMq5pG/Vm2IcBmPPfyPXbd8S02rS+OBIDENdufvqC7Z/jHPCv9IcP01277aKtDI8g/2XysBN4hA8niiw==} + /@babel/runtime-corejs3/7.18.9: + resolution: {integrity: sha512-qZEWeccZCrHA2Au4/X05QW5CMdm4VjUDCrGq5gf1ZDcM4hRqreKrtwAn7yci9zfgAS9apvnsFXiGBHBAxZdK9A==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-validator-identifier': 7.16.7 - to-fast-properties: 2.0.0 + core-js-pure: 3.24.1 + regenerator-runtime: 0.13.9 + dev: true + + /@babel/runtime/7.18.9: + resolution: {integrity: sha512-lkqXDcvlFT5rvEjiu6+QYO+1GXrEHRo2LOtS7E4GtX5ESIZOgepqsZBVIj6Pv+a6zqsya9VCgiK1KAK4BvJDAw==} + engines: {node: '>=6.9.0'} + dependencies: + regenerator-runtime: 0.13.9 + dev: true + + /@eslint/eslintrc/1.3.0: + resolution: {integrity: sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + ajv: 6.12.6 + debug: 4.3.4 + espree: 9.3.3 + globals: 13.17.0 + ignore: 5.2.0 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + dev: true + + /@humanwhocodes/config-array/0.10.4: + resolution: {integrity: sha512-mXAIHxZT3Vcpg83opl1wGlVZ9xydbfZO3r5YfRSH6Gpp2J/PfdBP0wbDa2sO6/qRbcalpoevVyW6A/fI6LfeMw==} + engines: {node: '>=10.10.0'} + dependencies: + '@humanwhocodes/object-schema': 1.2.1 + debug: 4.3.4 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@humanwhocodes/gitignore-to-minimatch/1.0.2: + resolution: {integrity: sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA==} + dev: true + + /@humanwhocodes/object-schema/1.2.1: + resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} + dev: true + + /@next/env/12.2.5: + resolution: {integrity: sha512-vLPLV3cpPGjUPT3PjgRj7e3nio9t6USkuew3JE/jMeon/9Mvp1WyR18v3iwnCuX7eUAm1HmAbJHHLAbcu/EJcw==} dev: false - /@sindresorhus/is/0.14.0: - resolution: {integrity: sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==} - engines: {node: '>=6'} - dev: true - - /@szmarczak/http-timer/1.1.2: - resolution: {integrity: sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==} - engines: {node: '>=6'} + /@next/eslint-plugin-next/12.2.5: + resolution: {integrity: sha512-VBjVbmqEzGiOTBq4+wpeVXt/KgknnGB6ahvC/AxiIGnN93/RCSyXhFRI4uSfftM2Ba3w7ZO7076bfKasZsA0fw==} dependencies: - defer-to-connect: 1.1.3 + glob: 7.1.7 dev: true - /@types/body-parser/1.19.2: - resolution: {integrity: sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==} + /@next/swc-android-arm-eabi/12.2.5: + resolution: {integrity: sha512-cPWClKxGhgn2dLWnspW+7psl3MoLQUcNqJqOHk2BhNcou9ARDtC0IjQkKe5qcn9qg7I7U83Gp1yh2aesZfZJMA==} + engines: {node: '>= 10'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: false + optional: true + + /@next/swc-android-arm64/12.2.5: + resolution: {integrity: sha512-vMj0efliXmC5b7p+wfcQCX0AfU8IypjkzT64GiKJD9PgiA3IILNiGJr1fw2lyUDHkjeWx/5HMlMEpLnTsQslwg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: false + optional: true + + /@next/swc-darwin-arm64/12.2.5: + resolution: {integrity: sha512-VOPWbO5EFr6snla/WcxUKtvzGVShfs302TEMOtzYyWni6f9zuOetijJvVh9CCTzInnXAZMtHyNhefijA4HMYLg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + + /@next/swc-darwin-x64/12.2.5: + resolution: {integrity: sha512-5o8bTCgAmtYOgauO/Xd27vW52G2/m3i5PX7MUYePquxXAnX73AAtqA3WgPXBRitEB60plSKZgOTkcpqrsh546A==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + + /@next/swc-freebsd-x64/12.2.5: + resolution: {integrity: sha512-yYUbyup1JnznMtEBRkK4LT56N0lfK5qNTzr6/DEyDw5TbFVwnuy2hhLBzwCBkScFVjpFdfiC6SQAX3FrAZzuuw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: false + optional: true + + /@next/swc-linux-arm-gnueabihf/12.2.5: + resolution: {integrity: sha512-2ZE2/G921Acks7UopJZVMgKLdm4vN4U0yuzvAMJ6KBavPzqESA2yHJlm85TV/K9gIjKhSk5BVtauIUntFRP8cg==} + engines: {node: '>= 10'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@next/swc-linux-arm64-gnu/12.2.5: + resolution: {integrity: sha512-/I6+PWVlz2wkTdWqhlSYYJ1pWWgUVva6SgX353oqTh8njNQp1SdFQuWDqk8LnM6ulheVfSsgkDzxrDaAQZnzjQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@next/swc-linux-arm64-musl/12.2.5: + resolution: {integrity: sha512-LPQRelfX6asXyVr59p5sTpx5l+0yh2Vjp/R8Wi4X9pnqcayqT4CUJLiHqCvZuLin3IsFdisJL0rKHMoaZLRfmg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@next/swc-linux-x64-gnu/12.2.5: + resolution: {integrity: sha512-0szyAo8jMCClkjNK0hknjhmAngUppoRekW6OAezbEYwHXN/VNtsXbfzgYOqjKWxEx3OoAzrT3jLwAF0HdX2MEw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@next/swc-linux-x64-musl/12.2.5: + resolution: {integrity: sha512-zg/Y6oBar1yVnW6Il1I/08/2ukWtOG6s3acdJdEyIdsCzyQi4RLxbbhkD/EGQyhqBvd3QrC6ZXQEXighQUAZ0g==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@next/swc-win32-arm64-msvc/12.2.5: + resolution: {integrity: sha512-3/90DRNSqeeSRMMEhj4gHHQlLhhKg5SCCoYfE3kBjGpE63EfnblYUqsszGGZ9ekpKL/R4/SGB40iCQr8tR5Jiw==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@next/swc-win32-ia32-msvc/12.2.5: + resolution: {integrity: sha512-hGLc0ZRAwnaPL4ulwpp4D2RxmkHQLuI8CFOEEHdzZpS63/hMVzv81g8jzYA0UXbb9pus/iTc3VRbVbAM03SRrw==} + engines: {node: '>= 10'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@next/swc-win32-x64-msvc/12.2.5: + resolution: {integrity: sha512-7h5/ahY7NeaO2xygqVrSG/Y8Vs4cdjxIjowTZ5W6CKoTKn7tmnuxlUc2h74x06FKmbhAd9agOjr/AOKyxYYm9Q==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@nodelib/fs.scandir/2.1.5: + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} dependencies: - '@types/connect': 3.4.35 - '@types/node': 17.0.40 + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 dev: true - /@types/connect/3.4.35: - resolution: {integrity: sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==} + /@nodelib/fs.stat/2.0.5: + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + dev: true + + /@nodelib/fs.walk/1.2.8: + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} dependencies: - '@types/node': 17.0.40 + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.13.0 dev: true - /@types/express-serve-static-core/4.17.28: - resolution: {integrity: sha512-P1BJAEAW3E2DJUlkgq4tOL3RyMunoWXqbSCygWo5ZIWTjUgN1YnaXWW4VWl/oc8vs/XoYibEGBKP0uZyF4AHig==} + /@rushstack/eslint-patch/1.1.4: + resolution: {integrity: sha512-LwzQKA4vzIct1zNZzBmRKI9QuNpLgTQMEjsQLf3BXuGYb3QPTP4Yjf6mkdX+X1mYttZ808QpOwAzZjv28kq7DA==} + dev: true + + /@swc/helpers/0.4.3: + resolution: {integrity: sha512-6JrF+fdUK2zbGpJIlN7G3v966PQjyx/dPt1T9km2wj+EUBqgrxCk3uX4Kct16MIm9gGxfKRcfax2hVf5jvlTzA==} dependencies: - '@types/node': 17.0.40 - '@types/qs': 6.9.7 - '@types/range-parser': 1.2.4 - dev: true - - /@types/express/4.17.13: - resolution: {integrity: sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==} - dependencies: - '@types/body-parser': 1.19.2 - '@types/express-serve-static-core': 4.17.28 - '@types/qs': 6.9.7 - '@types/serve-static': 1.13.10 - dev: true - - /@types/keyv/3.1.4: - resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} - dependencies: - '@types/node': 17.0.40 - dev: true - - /@types/mime/1.3.2: - resolution: {integrity: sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==} - dev: true - - /@types/morgan/1.9.3: - resolution: {integrity: sha512-BiLcfVqGBZCyNCnCH3F4o2GmDLrpy0HeBVnNlyZG4fo88ZiE9SoiBe3C+2ezuwbjlEyT+PDZ17//TAlRxAn75Q==} - dependencies: - '@types/node': 17.0.40 - dev: true - - /@types/node/17.0.40: - resolution: {integrity: sha512-UXdBxNGqTMtm7hCwh9HtncFVLrXoqA3oJW30j6XWp5BH/wu3mVeaxo7cq5benFdBw34HB3XDT2TRPI7rXZ+mDg==} - dev: true - - /@types/qs/6.9.7: - resolution: {integrity: sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==} - dev: true - - /@types/range-parser/1.2.4: - resolution: {integrity: sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==} - dev: true - - /@types/responselike/1.0.0: - resolution: {integrity: sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==} - dependencies: - '@types/node': 17.0.40 - dev: true - - /@types/serve-static/1.13.10: - resolution: {integrity: sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ==} - dependencies: - '@types/mime': 1.3.2 - '@types/node': 17.0.40 - dev: true - - /abbrev/1.1.1: - resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} - dev: true - - /accepts/1.3.8: - resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} - engines: {node: '>= 0.6'} - dependencies: - mime-types: 2.1.35 - negotiator: 0.6.3 + tslib: 2.4.0 dev: false - /acorn/7.4.1: - resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} + /@types/json5/0.0.29: + resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} + dev: true + + /@types/node/18.7.3: + resolution: {integrity: sha512-LJgzOEwWuMTBxHzgBR/fhhBOWrvBjvO+zPteUgbbuQi80rYIZHrk1mNbRUqPZqSLP2H7Rwt1EFLL/tNLD1Xx/w==} + dev: true + + /@types/prop-types/15.7.5: + resolution: {integrity: sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==} + dev: true + + /@types/react-dom/18.0.6: + resolution: {integrity: sha512-/5OFZgfIPSwy+YuIBP/FgJnQnsxhZhjjrnxudMddeblOouIodEQ75X14Rr4wGSG/bknL+Omy9iWlLo1u/9GzAA==} + dependencies: + '@types/react': 18.0.17 + dev: true + + /@types/react/18.0.17: + resolution: {integrity: sha512-38ETy4tL+rn4uQQi7mB81G7V1g0u2ryquNmsVIOKUAEIDK+3CUjZ6rSRpdvS99dNBnkLFL83qfmtLacGOTIhwQ==} + dependencies: + '@types/prop-types': 15.7.5 + '@types/scheduler': 0.16.2 + csstype: 3.1.0 + dev: true + + /@types/scheduler/0.16.2: + resolution: {integrity: sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==} + dev: true + + /@typescript-eslint/parser/5.33.0_4rv7y5c6xz3vfxwhbrcxxi73bq: + resolution: {integrity: sha512-cgM5cJrWmrDV2KpvlcSkelTBASAs1mgqq+IUGKJvFxWrapHpaRy5EXPQz9YaKF3nZ8KY18ILTiVpUtbIac86/w==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/scope-manager': 5.33.0 + '@typescript-eslint/types': 5.33.0 + '@typescript-eslint/typescript-estree': 5.33.0_typescript@4.7.4 + debug: 4.3.4 + eslint: 8.22.0 + typescript: 4.7.4 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/scope-manager/5.33.0: + resolution: {integrity: sha512-/Jta8yMNpXYpRDl8EwF/M8It2A9sFJTubDo0ATZefGXmOqlaBffEw0ZbkbQ7TNDK6q55NPHFshGBPAZvZkE8Pw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + '@typescript-eslint/types': 5.33.0 + '@typescript-eslint/visitor-keys': 5.33.0 + dev: true + + /@typescript-eslint/types/5.33.0: + resolution: {integrity: sha512-nIMt96JngB4MYFYXpZ/3ZNU4GWPNdBbcB5w2rDOCpXOVUkhtNlG2mmm8uXhubhidRZdwMaMBap7Uk8SZMU/ppw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true + + /@typescript-eslint/typescript-estree/5.33.0_typescript@4.7.4: + resolution: {integrity: sha512-tqq3MRLlggkJKJUrzM6wltk8NckKyyorCSGMq4eVkyL5sDYzJJcMgZATqmF8fLdsWrW7OjjIZ1m9v81vKcaqwQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/types': 5.33.0 + '@typescript-eslint/visitor-keys': 5.33.0 + debug: 4.3.4 + globby: 11.1.0 + is-glob: 4.0.3 + semver: 7.3.7 + tsutils: 3.21.0_typescript@4.7.4 + typescript: 4.7.4 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/visitor-keys/5.33.0: + resolution: {integrity: sha512-/XsqCzD4t+Y9p5wd9HZiptuGKBlaZO5showwqODii5C0nZawxWLF+Q6k5wYHBrQv96h6GYKyqqMHCSTqta8Kiw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + '@typescript-eslint/types': 5.33.0 + eslint-visitor-keys: 3.3.0 + dev: true + + /acorn-jsx/5.3.2_acorn@8.8.0: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + acorn: 8.8.0 + dev: true + + /acorn/8.8.0: + resolution: {integrity: sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==} engines: {node: '>=0.4.0'} hasBin: true - dev: false + dev: true - /ansi-align/3.0.1: - resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==} + /ajv/6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} dependencies: - string-width: 4.2.3 + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 dev: true /ansi-regex/5.0.1: @@ -182,22 +377,67 @@ packages: normalize-path: 3.0.0 picomatch: 2.3.1 - /array-flatten/1.1.1: - resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} - dev: false + /argparse/2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + dev: true - /asap/2.0.6: - resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} - dev: false + /aria-query/4.2.2: + resolution: {integrity: sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==} + engines: {node: '>=6.0'} + dependencies: + '@babel/runtime': 7.18.9 + '@babel/runtime-corejs3': 7.18.9 + dev: true - /assert-never/1.2.1: - resolution: {integrity: sha512-TaTivMB6pYI1kXwrFlEhLeGfOqoDNdTxjCdwRfFFkEA30Eu+k48W34nlok2EYWJfFFzqaEmichdNM7th6M5HNw==} - dev: false + /array-includes/3.1.5: + resolution: {integrity: sha512-iSDYZMMyTPkiFasVqfuAQnWAYcvO/SeBSCGKePoEthjp4LEMTe4uLc7b025o4jAZpHhihh8xPo99TNWUWWkGDQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.4 + es-abstract: 1.20.1 + get-intrinsic: 1.1.2 + is-string: 1.0.7 + dev: true + + /array-union/2.1.0: + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} + engines: {node: '>=8'} + dev: true + + /array.prototype.flat/1.3.0: + resolution: {integrity: sha512-12IUEkHsAhA4DY5s0FPgNXIdc8VRSqD9Zp78a5au9abH/SOBrsp082JOWFNTjkMozh8mqcdiKuaLGhPeYztxSw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.4 + es-abstract: 1.20.1 + es-shim-unscopables: 1.0.0 + dev: true + + /array.prototype.flatmap/1.3.0: + resolution: {integrity: sha512-PZC9/8TKAIxcWKdyeb77EzULHPrIX/tIZebLJUQOMR1OwYosT8yggdfWScfTBCDj5utONvOuPQQumYsU2ULbkg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.4 + es-abstract: 1.20.1 + es-shim-unscopables: 1.0.0 + dev: true + + /ast-types-flow/0.0.7: + resolution: {integrity: sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==} + dev: true /asynckit/0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} dev: false + /axe-core/4.4.3: + resolution: {integrity: sha512-32+ub6kkdhhWick/UjvEwRchgoetXqTK14INLqbGm5U2TzBkBNF3nQtLYm8ovxSkQWArjEQvftCKryjZaATu3w==} + engines: {node: '>=4'} + dev: true + /axios/0.27.2: resolution: {integrity: sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==} dependencies: @@ -207,66 +447,34 @@ packages: - debug dev: false - /babel-walk/3.0.0-canary-5: - resolution: {integrity: sha512-GAwkz0AihzY5bkwIY5QDR+LvsRQgB/B+1foMPvi0FZPMl5fjD7ICiznUiBdLYMH1QYe6vqu4gWYytZOccLouFw==} - engines: {node: '>= 10.0.0'} - dependencies: - '@babel/types': 7.18.4 - dev: false + /axobject-query/2.2.0: + resolution: {integrity: sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==} + dev: true /balanced-match/1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} dev: true - /basic-auth/2.0.1: - resolution: {integrity: sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==} - engines: {node: '>= 0.8'} - dependencies: - safe-buffer: 5.1.2 + /base64-js/1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} dev: false /binary-extensions/2.2.0: resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} engines: {node: '>=8'} - /body-parser/1.20.0: - resolution: {integrity: sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==} - engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + /bl/4.1.0: + resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} dependencies: - bytes: 3.1.2 - content-type: 1.0.4 - debug: 2.6.9 - depd: 2.0.0 - destroy: 1.2.0 - http-errors: 2.0.0 - iconv-lite: 0.4.24 - on-finished: 2.4.1 - qs: 6.10.3 - raw-body: 2.5.1 - type-is: 1.6.18 - unpipe: 1.0.0 - transitivePeerDependencies: - - supports-color + buffer: 5.7.1 + inherits: 2.0.4 + readable-stream: 3.6.0 dev: false /boolbase/1.0.0: resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} dev: false - /boxen/5.1.2: - resolution: {integrity: sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==} - engines: {node: '>=10'} - dependencies: - ansi-align: 3.0.1 - camelcase: 6.3.0 - chalk: 4.1.2 - cli-boxes: 2.2.1 - string-width: 4.2.3 - type-fest: 0.20.2 - widest-line: 3.1.0 - wrap-ansi: 7.0.0 - dev: true - /brace-expansion/1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} dependencies: @@ -280,41 +488,29 @@ packages: dependencies: fill-range: 7.0.1 - /bytes/3.0.0: - resolution: {integrity: sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=} - engines: {node: '>= 0.8'} - dev: false - - /bytes/3.1.2: - resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} - engines: {node: '>= 0.8'} - dev: false - - /cacheable-request/6.1.0: - resolution: {integrity: sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==} - engines: {node: '>=8'} + /buffer/5.7.1: + resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} dependencies: - clone-response: 1.0.2 - get-stream: 5.2.0 - http-cache-semantics: 4.1.0 - keyv: 3.1.0 - lowercase-keys: 2.0.0 - normalize-url: 4.5.1 - responselike: 1.0.2 - dev: true + base64-js: 1.5.1 + ieee754: 1.2.1 + dev: false /call-bind/1.0.2: resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} dependencies: function-bind: 1.1.1 - get-intrinsic: 1.1.1 - dev: false - - /camelcase/6.3.0: - resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} - engines: {node: '>=10'} + get-intrinsic: 1.1.2 dev: true + /callsites/3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + dev: true + + /caniuse-lite/1.0.30001375: + resolution: {integrity: sha512-kWIMkNzLYxSvnjy0hL8w1NOaWNr2rn39RTAVyIwcw8juu60bZDWiF1/loOYANzjtJmy6qPgNmn38ro5Pygagdw==} + dev: false + /chalk/4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} @@ -323,12 +519,6 @@ packages: supports-color: 7.2.0 dev: true - /character-parser/2.2.0: - resolution: {integrity: sha512-+UqJQjFEFaTAs3bNsF2j2kEN1baG/zghZbdqoYEDxGZtJo9LBzl1A+m0D4n3qKx8N2FNv8/Xp6yV9mQmBuptaw==} - dependencies: - is-regex: 1.1.4 - dev: false - /cheerio-select/2.1.0: resolution: {integrity: sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==} dependencies: @@ -340,8 +530,8 @@ packages: domutils: 3.0.1 dev: false - /cheerio/1.0.0-rc.11: - resolution: {integrity: sha512-bQwNaDIBKID5ts/DsdhxrjqFXYfLw4ste+wMKqWA8DyKcS4qwsPP4Bk8ZNaTJjvpiX/qW3BT4sU7d6Bh5i+dag==} + /cheerio/1.0.0-rc.12: + resolution: {integrity: sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==} engines: {node: '>= 6'} dependencies: cheerio-select: 2.1.0 @@ -351,7 +541,6 @@ packages: htmlparser2: 8.0.1 parse5: 7.0.0 parse5-htmlparser2-tree-adapter: 7.0.0 - tslib: 2.4.0 dev: false /chokidar/3.5.3: @@ -368,31 +557,33 @@ packages: optionalDependencies: fsevents: 2.3.2 - /ci-info/2.0.0: - resolution: {integrity: sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==} - dev: true - - /cli-boxes/2.2.1: - resolution: {integrity: sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==} - engines: {node: '>=6'} - dev: true - - /clone-response/1.0.2: - resolution: {integrity: sha512-yjLXh88P599UOyPTFX0POsd7WxnbsVsGohcwzHOLspIhhpalPw1BcqED8NblyZLKcGrL8dTgMlcaZxV2jAD41Q==} - dependencies: - mimic-response: 1.0.1 - dev: true + /chownr/1.1.4: + resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} + dev: false /color-convert/2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} engines: {node: '>=7.0.0'} dependencies: color-name: 1.1.4 - dev: true /color-name/1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - dev: true + + /color-string/1.9.1: + resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} + dependencies: + color-name: 1.1.4 + simple-swizzle: 0.2.2 + dev: false + + /color/4.2.3: + resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} + engines: {node: '>=12.5.0'} + dependencies: + color-convert: 2.0.1 + color-string: 1.9.1 + dev: false /combined-stream/1.0.8: resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} @@ -401,75 +592,22 @@ packages: delayed-stream: 1.0.0 dev: false - /compressible/2.0.18: - resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} - engines: {node: '>= 0.6'} - dependencies: - mime-db: 1.52.0 - dev: false - - /compression/1.7.4: - resolution: {integrity: sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==} - engines: {node: '>= 0.8.0'} - dependencies: - accepts: 1.3.8 - bytes: 3.0.0 - compressible: 2.0.18 - debug: 2.6.9 - on-headers: 1.0.2 - safe-buffer: 5.1.2 - vary: 1.1.2 - transitivePeerDependencies: - - supports-color - dev: false - /concat-map/0.0.1: resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=} dev: true - /configstore/5.0.1: - resolution: {integrity: sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==} - engines: {node: '>=8'} - dependencies: - dot-prop: 5.3.0 - graceful-fs: 4.2.10 - make-dir: 3.1.0 - unique-string: 2.0.0 - write-file-atomic: 3.0.3 - xdg-basedir: 4.0.0 + /core-js-pure/3.24.1: + resolution: {integrity: sha512-r1nJk41QLLPyozHUUPmILCEMtMw24NG4oWK6RbsDdjzQgg9ZvrUsPBj1MnG0wXXp1DCDU6j+wUvEmBSrtRbLXg==} + requiresBuild: true dev: true - /constantinople/4.0.1: - resolution: {integrity: sha512-vCrqcSIq4//Gx74TXXCGnHpulY1dskqLTFGDmhrGxzeXL8lF8kvXv6mpNWlJj1uD4DW23D4ljAqbY4RRaaUZIw==} + /cross-spawn/7.0.3: + resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + engines: {node: '>= 8'} dependencies: - '@babel/parser': 7.18.4 - '@babel/types': 7.18.4 - dev: false - - /content-disposition/0.5.4: - resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} - engines: {node: '>= 0.6'} - dependencies: - safe-buffer: 5.2.1 - dev: false - - /content-type/1.0.4: - resolution: {integrity: sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==} - engines: {node: '>= 0.6'} - dev: false - - /cookie-signature/1.0.6: - resolution: {integrity: sha1-4wOogrNCzD7oylE6eZmXNNqzriw=} - dev: false - - /cookie/0.5.0: - resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} - engines: {node: '>= 0.6'} - dev: false - - /crypto-random-string/2.0.0: - resolution: {integrity: sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==} - engines: {node: '>=8'} + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 dev: true /css-select/5.1.0: @@ -487,6 +625,14 @@ packages: engines: {node: '>= 6'} dev: false + /csstype/3.1.0: + resolution: {integrity: sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA==} + dev: true + + /damerau-levenshtein/1.0.8: + resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} + dev: true + /debug/2.6.9: resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} peerDependencies: @@ -496,9 +642,9 @@ packages: optional: true dependencies: ms: 2.0.0 - dev: false + dev: true - /debug/3.2.7_supports-color@5.5.0: + /debug/3.2.7: resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} peerDependencies: supports-color: '*' @@ -507,23 +653,42 @@ packages: optional: true dependencies: ms: 2.1.3 - supports-color: 5.5.0 dev: true - /decompress-response/3.3.0: - resolution: {integrity: sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==} - engines: {node: '>=4'} + /debug/4.3.4: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true dependencies: - mimic-response: 1.0.1 + ms: 2.1.2 dev: true + /decompress-response/6.0.0: + resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} + engines: {node: '>=10'} + dependencies: + mimic-response: 3.1.0 + dev: false + /deep-extend/0.6.0: resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} engines: {node: '>=4.0.0'} + dev: false + + /deep-is/0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} dev: true - /defer-to-connect/1.1.3: - resolution: {integrity: sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==} + /define-properties/1.1.4: + resolution: {integrity: sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==} + engines: {node: '>= 0.4'} + dependencies: + has-property-descriptors: 1.0.0 + object-keys: 1.1.1 dev: true /delayed-stream/1.0.0: @@ -531,26 +696,38 @@ packages: engines: {node: '>=0.4.0'} dev: false - /depd/2.0.0: - resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} - engines: {node: '>= 0.8'} + /detect-libc/2.0.1: + resolution: {integrity: sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==} + engines: {node: '>=8'} dev: false - /destroy/1.2.0: - resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} - engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} - dev: false + /dir-glob/3.0.1: + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} + dependencies: + path-type: 4.0.0 + dev: true - /doctypes/1.1.0: - resolution: {integrity: sha512-LLBi6pEqS6Do3EKQ3J0NqHWV5hhb78Pi8vvESYwyOy2c31ZEZVdtitdzsQsKb7878PEERhzUk0ftqGhG6Mz+pQ==} - dev: false + /doctrine/2.1.0: + resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} + engines: {node: '>=0.10.0'} + dependencies: + esutils: 2.0.3 + dev: true + + /doctrine/3.0.0: + resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} + engines: {node: '>=6.0.0'} + dependencies: + esutils: 2.0.3 + dev: true /dom-serializer/2.0.0: resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} dependencies: domelementtype: 2.3.0 domhandler: 5.0.3 - entities: 4.3.0 + entities: 4.3.1 dev: false /domelementtype/2.3.0: @@ -572,119 +749,412 @@ packages: domhandler: 5.0.3 dev: false - /dot-prop/5.3.0: - resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==} - engines: {node: '>=8'} - dependencies: - is-obj: 2.0.0 + /emoji-regex/9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} dev: true - /dotenv/16.0.1: - resolution: {integrity: sha512-1K6hR6wtk2FviQ4kEiSjFiH5rpzEVi8WW0x96aztHVMhEspNpc4DVOUTEHtEva5VThQ8IaBX1Pe4gSzpVVUsKQ==} - engines: {node: '>=12'} - dev: false - - /duplexer3/0.1.4: - resolution: {integrity: sha512-CEj8FwwNA4cVH2uFCoHUrmojhYh1vmCdOaneKJXwkeY1i9jnlslVo9dx+hQ5Hl9GnH/Bwy/IjxAyOePyPKYnzA==} - dev: true - - /ee-first/1.1.1: - resolution: {integrity: sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=} - dev: false - - /emoji-regex/8.0.0: - resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - dev: true - - /encodeurl/1.0.2: - resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} - engines: {node: '>= 0.8'} - dev: false - /end-of-stream/1.4.4: resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} dependencies: once: 1.4.0 - dev: true + dev: false - /entities/4.3.0: - resolution: {integrity: sha512-/iP1rZrSEJ0DTlPiX+jbzlA3eVkY/e8L8SozroF395fIqE3TYF/Nz7YOMAawta+vLmyJ/hkGNNPcSbMADCCXbg==} + /entities/4.3.1: + resolution: {integrity: sha512-o4q/dYJlmyjP2zfnaWDUC6A3BQFmVTX+tZPezK7k0GLSU9QYCauscf5Y+qcEPzKL+EixVouYDgLQK5H9GrLpkg==} engines: {node: '>=0.12'} dev: false - /escape-goat/2.1.1: - resolution: {integrity: sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==} - engines: {node: '>=8'} + /es-abstract/1.20.1: + resolution: {integrity: sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + es-to-primitive: 1.2.1 + function-bind: 1.1.1 + function.prototype.name: 1.1.5 + get-intrinsic: 1.1.2 + get-symbol-description: 1.0.0 + has: 1.0.3 + has-property-descriptors: 1.0.0 + has-symbols: 1.0.3 + internal-slot: 1.0.3 + is-callable: 1.2.4 + is-negative-zero: 2.0.2 + is-regex: 1.1.4 + is-shared-array-buffer: 1.0.2 + is-string: 1.0.7 + is-weakref: 1.0.2 + object-inspect: 1.12.2 + object-keys: 1.1.1 + object.assign: 4.1.3 + regexp.prototype.flags: 1.4.3 + string.prototype.trimend: 1.0.5 + string.prototype.trimstart: 1.0.5 + unbox-primitive: 1.0.2 dev: true - /escape-html/1.0.3: - resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} - dev: false - - /etag/1.8.1: - resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} - engines: {node: '>= 0.6'} - dev: false - - /express/4.18.1: - resolution: {integrity: sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==} - engines: {node: '>= 0.10.0'} + /es-shim-unscopables/1.0.0: + resolution: {integrity: sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==} dependencies: - accepts: 1.3.8 - array-flatten: 1.1.1 - body-parser: 1.20.0 - content-disposition: 0.5.4 - content-type: 1.0.4 - cookie: 0.5.0 - cookie-signature: 1.0.6 - debug: 2.6.9 - depd: 2.0.0 - encodeurl: 1.0.2 - escape-html: 1.0.3 - etag: 1.8.1 - finalhandler: 1.2.0 - fresh: 0.5.2 - http-errors: 2.0.0 - merge-descriptors: 1.0.1 - methods: 1.1.2 - on-finished: 2.4.1 - parseurl: 1.3.3 - path-to-regexp: 0.1.7 - proxy-addr: 2.0.7 - qs: 6.10.3 - range-parser: 1.2.1 - safe-buffer: 5.2.1 - send: 0.18.0 - serve-static: 1.15.0 - setprototypeof: 1.2.0 - statuses: 2.0.1 - type-is: 1.6.18 - utils-merge: 1.0.1 - vary: 1.1.2 + has: 1.0.3 + dev: true + + /es-to-primitive/1.2.1: + resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} + engines: {node: '>= 0.4'} + dependencies: + is-callable: 1.2.4 + is-date-object: 1.0.5 + is-symbol: 1.0.4 + dev: true + + /escape-string-regexp/4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + dev: true + + /eslint-config-next/12.2.5_4rv7y5c6xz3vfxwhbrcxxi73bq: + resolution: {integrity: sha512-SOowilkqPzW6DxKp3a3SYlrfPi5Ajs9MIzp9gVfUDxxH9QFM5ElkR1hX5m/iICJuvCbWgQqFBiA3mCMozluniw==} + peerDependencies: + eslint: ^7.23.0 || ^8.0.0 + typescript: '>=3.3.1' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@next/eslint-plugin-next': 12.2.5 + '@rushstack/eslint-patch': 1.1.4 + '@typescript-eslint/parser': 5.33.0_4rv7y5c6xz3vfxwhbrcxxi73bq + eslint: 8.22.0 + eslint-import-resolver-node: 0.3.6 + eslint-import-resolver-typescript: 2.7.1_2iahngt3u2tkbdlu6s4gkur3pu + eslint-plugin-import: 2.26.0_42jdfezp7lcuhr3fexihng3k3a + eslint-plugin-jsx-a11y: 6.6.1_eslint@8.22.0 + eslint-plugin-react: 7.30.1_eslint@8.22.0 + eslint-plugin-react-hooks: 4.6.0_eslint@8.22.0 + typescript: 4.7.4 + transitivePeerDependencies: + - eslint-import-resolver-webpack + - supports-color + dev: true + + /eslint-import-resolver-node/0.3.6: + resolution: {integrity: sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==} + dependencies: + debug: 3.2.7 + resolve: 1.22.1 transitivePeerDependencies: - supports-color + dev: true + + /eslint-import-resolver-typescript/2.7.1_2iahngt3u2tkbdlu6s4gkur3pu: + resolution: {integrity: sha512-00UbgGwV8bSgUv34igBDbTOtKhqoRMy9bFjNehT40bXg6585PNIct8HhXZ0SybqB9rWtXj9crcku8ndDn/gIqQ==} + engines: {node: '>=4'} + peerDependencies: + eslint: '*' + eslint-plugin-import: '*' + dependencies: + debug: 4.3.4 + eslint: 8.22.0 + eslint-plugin-import: 2.26.0_42jdfezp7lcuhr3fexihng3k3a + glob: 7.2.3 + is-glob: 4.0.3 + resolve: 1.22.1 + tsconfig-paths: 3.14.1 + transitivePeerDependencies: + - supports-color + dev: true + + /eslint-module-utils/2.7.4_2znkvn5grarov6xvamxzzjpwtu: + resolution: {integrity: sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: '*' + eslint-import-resolver-node: '*' + eslint-import-resolver-typescript: '*' + eslint-import-resolver-webpack: '*' + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + eslint: + optional: true + eslint-import-resolver-node: + optional: true + eslint-import-resolver-typescript: + optional: true + eslint-import-resolver-webpack: + optional: true + dependencies: + '@typescript-eslint/parser': 5.33.0_4rv7y5c6xz3vfxwhbrcxxi73bq + debug: 3.2.7 + eslint: 8.22.0 + eslint-import-resolver-node: 0.3.6 + eslint-import-resolver-typescript: 2.7.1_2iahngt3u2tkbdlu6s4gkur3pu + transitivePeerDependencies: + - supports-color + dev: true + + /eslint-plugin-import/2.26.0_42jdfezp7lcuhr3fexihng3k3a: + resolution: {integrity: sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + dependencies: + '@typescript-eslint/parser': 5.33.0_4rv7y5c6xz3vfxwhbrcxxi73bq + array-includes: 3.1.5 + array.prototype.flat: 1.3.0 + debug: 2.6.9 + doctrine: 2.1.0 + eslint: 8.22.0 + eslint-import-resolver-node: 0.3.6 + eslint-module-utils: 2.7.4_2znkvn5grarov6xvamxzzjpwtu + has: 1.0.3 + is-core-module: 2.10.0 + is-glob: 4.0.3 + minimatch: 3.1.2 + object.values: 1.1.5 + resolve: 1.22.1 + tsconfig-paths: 3.14.1 + transitivePeerDependencies: + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color + dev: true + + /eslint-plugin-jsx-a11y/6.6.1_eslint@8.22.0: + resolution: {integrity: sha512-sXgFVNHiWffBq23uiS/JaP6eVR622DqwB4yTzKvGZGcPq6/yZ3WmOZfuBks/vHWo9GaFOqC2ZK4i6+C35knx7Q==} + engines: {node: '>=4.0'} + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 + dependencies: + '@babel/runtime': 7.18.9 + aria-query: 4.2.2 + array-includes: 3.1.5 + ast-types-flow: 0.0.7 + axe-core: 4.4.3 + axobject-query: 2.2.0 + damerau-levenshtein: 1.0.8 + emoji-regex: 9.2.2 + eslint: 8.22.0 + has: 1.0.3 + jsx-ast-utils: 3.3.3 + language-tags: 1.0.5 + minimatch: 3.1.2 + semver: 6.3.0 + dev: true + + /eslint-plugin-react-hooks/4.6.0_eslint@8.22.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.22.0 + dev: true + + /eslint-plugin-react/7.30.1_eslint@8.22.0: + resolution: {integrity: sha512-NbEvI9jtqO46yJA3wcRF9Mo0lF9T/jhdHqhCHXiXtD+Zcb98812wvokjWpU7Q4QH5edo6dmqrukxVvWWXHlsUg==} + engines: {node: '>=4'} + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 + dependencies: + array-includes: 3.1.5 + array.prototype.flatmap: 1.3.0 + doctrine: 2.1.0 + eslint: 8.22.0 + estraverse: 5.3.0 + jsx-ast-utils: 3.3.3 + minimatch: 3.1.2 + object.entries: 1.1.5 + object.fromentries: 2.0.5 + object.hasown: 1.1.1 + object.values: 1.1.5 + prop-types: 15.8.1 + resolve: 2.0.0-next.4 + semver: 6.3.0 + string.prototype.matchall: 4.0.7 + dev: true + + /eslint-scope/7.1.1: + resolution: {integrity: sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + dev: true + + /eslint-utils/3.0.0_eslint@8.22.0: + resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==} + engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0} + peerDependencies: + eslint: '>=5' + dependencies: + eslint: 8.22.0 + eslint-visitor-keys: 2.1.0 + dev: true + + /eslint-visitor-keys/2.1.0: + resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} + engines: {node: '>=10'} + dev: true + + /eslint-visitor-keys/3.3.0: + resolution: {integrity: sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true + + /eslint/8.22.0: + resolution: {integrity: sha512-ci4t0sz6vSRKdmkOGmprBo6fmI4PrphDFMy5JEq/fNS0gQkJM3rLmrqcp8ipMcdobH3KtUP40KniAE9W19S4wA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + hasBin: true + dependencies: + '@eslint/eslintrc': 1.3.0 + '@humanwhocodes/config-array': 0.10.4 + '@humanwhocodes/gitignore-to-minimatch': 1.0.2 + 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.1.1 + eslint-utils: 3.0.0_eslint@8.22.0 + eslint-visitor-keys: 3.3.0 + espree: 9.3.3 + esquery: 1.4.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 6.0.1 + find-up: 5.0.0 + functional-red-black-tree: 1.0.1 + glob-parent: 6.0.2 + globals: 13.17.0 + globby: 11.1.0 + grapheme-splitter: 1.0.4 + ignore: 5.2.0 + import-fresh: 3.3.0 + imurmurhash: 0.1.4 + is-glob: 4.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.1 + regexpp: 3.2.0 + strip-ansi: 6.0.1 + strip-json-comments: 3.1.1 + text-table: 0.2.0 + v8-compile-cache: 2.3.0 + transitivePeerDependencies: + - supports-color + dev: true + + /espree/9.3.3: + resolution: {integrity: sha512-ORs1Rt/uQTqUKjDdGCyrtYxbazf5umATSf/K4qxjmZHORR6HJk+2s/2Pqe+Kk49HHINC/xNIrGfgh8sZcll0ng==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + acorn: 8.8.0 + acorn-jsx: 5.3.2_acorn@8.8.0 + eslint-visitor-keys: 3.3.0 + dev: true + + /esquery/1.4.0: + resolution: {integrity: sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==} + engines: {node: '>=0.10'} + dependencies: + estraverse: 5.3.0 + dev: true + + /esrecurse/4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + dependencies: + estraverse: 5.3.0 + dev: true + + /estraverse/5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + dev: true + + /esutils/2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + dev: true + + /expand-template/2.0.3: + resolution: {integrity: sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==} + engines: {node: '>=6'} dev: false + /fast-deep-equal/3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + dev: true + + /fast-glob/3.2.11: + resolution: {integrity: sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==} + engines: {node: '>=8.6.0'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.5 + dev: true + + /fast-json-stable-stringify/2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + dev: true + + /fast-levenshtein/2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + dev: true + + /fastq/1.13.0: + resolution: {integrity: sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==} + dependencies: + reusify: 1.0.4 + dev: true + + /file-entry-cache/6.0.1: + resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} + engines: {node: ^10.12.0 || >=12.0.0} + dependencies: + flat-cache: 3.0.4 + dev: true + /fill-range/7.0.1: resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} engines: {node: '>=8'} dependencies: to-regex-range: 5.0.1 - /finalhandler/1.2.0: - resolution: {integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==} - engines: {node: '>= 0.8'} + /find-up/5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} dependencies: - debug: 2.6.9 - encodeurl: 1.0.2 - escape-html: 1.0.3 - on-finished: 2.4.1 - parseurl: 1.3.3 - statuses: 2.0.1 - unpipe: 1.0.0 - transitivePeerDependencies: - - supports-color - dev: false + locate-path: 6.0.0 + path-exists: 4.0.0 + dev: true + + /flat-cache/3.0.4: + resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==} + engines: {node: ^10.12.0 || >=12.0.0} + dependencies: + flatted: 3.2.6 + rimraf: 3.0.2 + dev: true + + /flatted/3.2.6: + resolution: {integrity: sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ==} + dev: true /follow-redirects/1.15.1: resolution: {integrity: sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==} @@ -705,15 +1175,13 @@ packages: mime-types: 2.1.35 dev: false - /forwarded/0.2.0: - resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} - engines: {node: '>= 0.6'} + /fs-constants/1.0.0: + resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} dev: false - /fresh/0.5.2: - resolution: {integrity: sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=} - engines: {node: '>= 0.6'} - dev: false + /fs.realpath/1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + dev: true /fsevents/2.3.2: resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} @@ -724,69 +1192,106 @@ packages: /function-bind/1.1.1: resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} - dev: false + dev: true - /get-intrinsic/1.1.1: - resolution: {integrity: sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==} + /function.prototype.name/1.1.5: + resolution: {integrity: sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.4 + es-abstract: 1.20.1 + functions-have-names: 1.2.3 + dev: true + + /functional-red-black-tree/1.0.1: + resolution: {integrity: sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==} + dev: true + + /functions-have-names/1.2.3: + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + dev: true + + /get-intrinsic/1.1.2: + resolution: {integrity: sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==} dependencies: function-bind: 1.1.1 has: 1.0.3 has-symbols: 1.0.3 + dev: true + + /get-symbol-description/1.0.0: + resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.1.2 + dev: true + + /github-from-package/0.0.0: + resolution: {integrity: sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=} dev: false - /get-stream/4.1.0: - resolution: {integrity: sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==} - engines: {node: '>=6'} - dependencies: - pump: 3.0.0 - dev: true - - /get-stream/5.2.0: - resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} - engines: {node: '>=8'} - dependencies: - pump: 3.0.0 - dev: true - /glob-parent/5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} dependencies: is-glob: 4.0.3 - /global-dirs/3.0.0: - resolution: {integrity: sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==} + /glob-parent/6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + dependencies: + is-glob: 4.0.3 + dev: true + + /glob/7.1.7: + resolution: {integrity: sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==} + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + dev: true + + /glob/7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + dev: true + + /globals/13.17.0: + resolution: {integrity: sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==} + engines: {node: '>=8'} + dependencies: + type-fest: 0.20.2 + dev: true + + /globby/11.1.0: + resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} engines: {node: '>=10'} dependencies: - ini: 2.0.0 + array-union: 2.1.0 + dir-glob: 3.0.1 + fast-glob: 3.2.11 + ignore: 5.2.0 + merge2: 1.4.1 + slash: 3.0.0 dev: true - /got/9.6.0: - resolution: {integrity: sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==} - engines: {node: '>=8.6'} - dependencies: - '@sindresorhus/is': 0.14.0 - '@szmarczak/http-timer': 1.1.2 - '@types/keyv': 3.1.4 - '@types/responselike': 1.0.0 - cacheable-request: 6.1.0 - decompress-response: 3.3.0 - duplexer3: 0.1.4 - get-stream: 4.1.0 - lowercase-keys: 1.0.1 - mimic-response: 1.0.1 - p-cancelable: 1.1.0 - to-readable-stream: 1.0.0 - url-parse-lax: 3.0.0 + /grapheme-splitter/1.0.4: + resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==} dev: true - /graceful-fs/4.2.10: - resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} - dev: true - - /has-flag/3.0.0: - resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} - engines: {node: '>=4'} + /has-bigints/1.0.2: + resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} dev: true /has-flag/4.0.0: @@ -794,21 +1299,22 @@ packages: engines: {node: '>=8'} dev: true + /has-property-descriptors/1.0.0: + resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==} + dependencies: + get-intrinsic: 1.1.2 + dev: true + /has-symbols/1.0.3: resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} engines: {node: '>= 0.4'} - dev: false + dev: true /has-tostringtag/1.0.0: resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} engines: {node: '>= 0.4'} dependencies: has-symbols: 1.0.3 - dev: false - - /has-yarn/2.1.0: - resolution: {integrity: sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==} - engines: {node: '>=8'} dev: true /has/1.0.3: @@ -816,12 +1322,7 @@ packages: engines: {node: '>= 0.4.0'} dependencies: function-bind: 1.1.1 - dev: false - - /helmet/5.1.0: - resolution: {integrity: sha512-klsunXs8rgNSZoaUrNeuCiWUxyc+wzucnEnFejUg3/A+CaF589k9qepLZZ1Jehnzig7YbD4hEuscGXuBY3fq+g==} - engines: {node: '>=12.0.0'} - dev: false + dev: true /htmlparser2/8.0.1: resolution: {integrity: sha512-4lVbmc1diZC7GUJQtRQ5yBAeUCL1exyMwmForWkRLnwyzWBFxN633SALPMGYaWZvKe9j1pRZJpauvmxENSp/EA==} @@ -829,42 +1330,27 @@ packages: domelementtype: 2.3.0 domhandler: 5.0.3 domutils: 3.0.1 - entities: 4.3.0 + entities: 4.3.1 dev: false - /http-cache-semantics/4.1.0: - resolution: {integrity: sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==} - dev: true - - /http-errors/2.0.0: - resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} - engines: {node: '>= 0.8'} - dependencies: - depd: 2.0.0 - inherits: 2.0.4 - setprototypeof: 1.2.0 - statuses: 2.0.1 - toidentifier: 1.0.1 + /ieee754/1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} dev: false - /iconv-lite/0.4.24: - resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} - engines: {node: '>=0.10.0'} - dependencies: - safer-buffer: 2.1.2 - dev: false - - /ignore-by-default/1.0.1: - resolution: {integrity: sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==} + /ignore/5.2.0: + resolution: {integrity: sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==} + engines: {node: '>= 4'} dev: true /immutable/4.1.0: resolution: {integrity: sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==} - dev: false - /import-lazy/2.1.0: - resolution: {integrity: sha512-m7ZEHgtw69qOGw+jwxXkHlrlIPdTGkyh66zXZ1ajZbxkDBNjSY/LGbmjc7h0s2ELsUDTAhFr55TrPSSqJGPG0A==} - engines: {node: '>=4'} + /import-fresh/3.3.0: + resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + engines: {node: '>=6'} + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 dev: true /imurmurhash/0.1.4: @@ -872,178 +1358,222 @@ packages: engines: {node: '>=0.8.19'} dev: true + /inflight/1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + dev: true + /inherits/2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - dev: false /ini/1.3.8: resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} - dev: true - - /ini/2.0.0: - resolution: {integrity: sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==} - engines: {node: '>=10'} - dev: true - - /ipaddr.js/1.9.1: - resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} - engines: {node: '>= 0.10'} dev: false + /internal-slot/1.0.3: + resolution: {integrity: sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.1.2 + has: 1.0.3 + side-channel: 1.0.4 + dev: true + + /is-arrayish/0.3.2: + resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} + dev: false + + /is-bigint/1.0.4: + resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} + dependencies: + has-bigints: 1.0.2 + dev: true + /is-binary-path/2.1.0: resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} engines: {node: '>=8'} dependencies: binary-extensions: 2.2.0 - /is-ci/2.0.0: - resolution: {integrity: sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==} - hasBin: true + /is-boolean-object/1.1.2: + resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} + engines: {node: '>= 0.4'} dependencies: - ci-info: 2.0.0 + call-bind: 1.0.2 + has-tostringtag: 1.0.0 dev: true - /is-core-module/2.9.0: - resolution: {integrity: sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==} + /is-callable/1.2.4: + resolution: {integrity: sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==} + engines: {node: '>= 0.4'} + dev: true + + /is-core-module/2.10.0: + resolution: {integrity: sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==} dependencies: has: 1.0.3 - dev: false + dev: true - /is-expression/4.0.0: - resolution: {integrity: sha512-zMIXX63sxzG3XrkHkrAPvm/OVZVSCPNkwMHU8oTX7/U3AL78I0QXCEICXUM13BIa8TYGZ68PiTKfQz3yaTNr4A==} + /is-date-object/1.0.5: + resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} + engines: {node: '>= 0.4'} dependencies: - acorn: 7.4.1 - object-assign: 4.1.1 - dev: false + has-tostringtag: 1.0.0 + dev: true /is-extglob/2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} - /is-fullwidth-code-point/3.0.0: - resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} - engines: {node: '>=8'} - dev: true - /is-glob/4.0.3: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} dependencies: is-extglob: 2.1.1 - /is-installed-globally/0.4.0: - resolution: {integrity: sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==} - engines: {node: '>=10'} - dependencies: - global-dirs: 3.0.0 - is-path-inside: 3.0.3 + /is-negative-zero/2.0.2: + resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} + engines: {node: '>= 0.4'} dev: true - /is-npm/5.0.0: - resolution: {integrity: sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==} - engines: {node: '>=10'} + /is-number-object/1.0.7: + resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.0 dev: true /is-number/7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} - /is-obj/2.0.0: - resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==} - engines: {node: '>=8'} - dev: true - - /is-path-inside/3.0.3: - resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} - engines: {node: '>=8'} - dev: true - - /is-promise/2.2.2: - resolution: {integrity: sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==} - dev: false - /is-regex/1.1.4: resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 has-tostringtag: 1.0.0 - dev: false - - /is-typedarray/1.0.0: - resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} dev: true - /is-yarn-global/0.3.0: - resolution: {integrity: sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==} - dev: true - - /js-stringify/1.0.2: - resolution: {integrity: sha512-rtS5ATOo2Q5k1G+DADISilDA6lv79zIiwFd6CcjuIxGKLFm5C+RLImRscVap9k55i+MOZwgliw+NejvkLuGD5g==} - dev: false - - /json-buffer/3.0.0: - resolution: {integrity: sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=} - dev: true - - /jstransformer/1.0.0: - resolution: {integrity: sha1-7Yvwkh4vPx7U1cGkT2hwntJHIsM=} + /is-shared-array-buffer/1.0.2: + resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} dependencies: - is-promise: 2.2.2 - promise: 7.3.1 - dev: false + call-bind: 1.0.2 + dev: true - /keyv/3.1.0: - resolution: {integrity: sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==} + /is-string/1.0.7: + resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} + engines: {node: '>= 0.4'} dependencies: - json-buffer: 3.0.0 + has-tostringtag: 1.0.0 dev: true - /latest-version/5.1.0: - resolution: {integrity: sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==} - engines: {node: '>=8'} + /is-symbol/1.0.4: + resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} + engines: {node: '>= 0.4'} dependencies: - package-json: 6.5.0 + has-symbols: 1.0.3 dev: true - /lowercase-keys/1.0.1: - resolution: {integrity: sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==} - engines: {node: '>=0.10.0'} + /is-weakref/1.0.2: + resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} + dependencies: + call-bind: 1.0.2 dev: true - /lowercase-keys/2.0.0: - resolution: {integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==} - engines: {node: '>=8'} + /isexe/2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} dev: true + /js-tokens/4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + /js-yaml/4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + dependencies: + argparse: 2.0.1 + dev: true + + /json-schema-traverse/0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + dev: true + + /json-stable-stringify-without-jsonify/1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + dev: true + + /json5/1.0.1: + resolution: {integrity: sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==} + hasBin: true + dependencies: + minimist: 1.2.6 + dev: true + + /jsx-ast-utils/3.3.3: + resolution: {integrity: sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==} + engines: {node: '>=4.0'} + dependencies: + array-includes: 3.1.5 + object.assign: 4.1.3 + dev: true + + /language-subtag-registry/0.3.22: + resolution: {integrity: sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==} + dev: true + + /language-tags/1.0.5: + resolution: {integrity: sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==} + dependencies: + language-subtag-registry: 0.3.22 + dev: true + + /levn/0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + dev: true + + /locate-path/6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + dependencies: + p-locate: 5.0.0 + dev: true + + /lodash.merge/4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + dev: true + + /loose-envify/1.4.0: + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true + dependencies: + js-tokens: 4.0.0 + /lru-cache/6.0.0: resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} engines: {node: '>=10'} dependencies: yallist: 4.0.0 + + /merge2/1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} dev: true - /make-dir/3.1.0: - resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} - engines: {node: '>=8'} + /micromatch/4.0.5: + resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} + engines: {node: '>=8.6'} dependencies: - semver: 6.3.0 + braces: 3.0.2 + picomatch: 2.3.1 dev: true - /media-typer/0.3.0: - resolution: {integrity: sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=} - engines: {node: '>= 0.6'} - dev: false - - /merge-descriptors/1.0.1: - resolution: {integrity: sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=} - dev: false - - /methods/1.1.2: - resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} - engines: {node: '>= 0.6'} - dev: false - /mime-db/1.52.0: resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} engines: {node: '>= 0.6'} @@ -1056,17 +1586,11 @@ packages: mime-db: 1.52.0 dev: false - /mime/1.6.0: - resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} - engines: {node: '>=4'} - hasBin: true + /mimic-response/3.1.0: + resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} + engines: {node: '>=10'} dev: false - /mimic-response/1.0.1: - resolution: {integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==} - engines: {node: '>=4'} - dev: true - /minimatch/3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} dependencies: @@ -1075,67 +1599,98 @@ packages: /minimist/1.2.6: resolution: {integrity: sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==} - dev: true - /morgan/1.10.0: - resolution: {integrity: sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==} - engines: {node: '>= 0.8.0'} - dependencies: - basic-auth: 2.0.1 - debug: 2.6.9 - depd: 2.0.0 - on-finished: 2.3.0 - on-headers: 1.0.2 - transitivePeerDependencies: - - supports-color + /mkdirp-classic/0.5.3: + resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} dev: false /ms/2.0.0: resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} - dev: false + dev: true + + /ms/2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + dev: true /ms/2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + dev: true - /negotiator/0.6.3: - resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} - engines: {node: '>= 0.6'} + /nanoid/3.3.4: + resolution: {integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true dev: false - /nodemon/2.0.16: - resolution: {integrity: sha512-zsrcaOfTWRuUzBn3P44RDliLlp263Z/76FPoHFr3cFFkOz0lTPAcIw8dCzfdVIx/t3AtDYCZRCDkoCojJqaG3w==} - engines: {node: '>=8.10.0'} - hasBin: true - requiresBuild: true - dependencies: - chokidar: 3.5.3 - debug: 3.2.7_supports-color@5.5.0 - ignore-by-default: 1.0.1 - minimatch: 3.1.2 - pstree.remy: 1.1.8 - semver: 5.7.1 - supports-color: 5.5.0 - touch: 3.1.0 - undefsafe: 2.0.5 - update-notifier: 5.1.0 + /napi-build-utils/1.0.2: + resolution: {integrity: sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==} + dev: false + + /natural-compare/1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} dev: true - /nopt/1.0.10: - resolution: {integrity: sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==} + /next/12.2.5_ivfob5dyaiglqb5g2zdrumbbbm: + resolution: {integrity: sha512-tBdjqX5XC/oFs/6gxrZhjmiq90YWizUYU6qOWAfat7zJwrwapJ+BYgX2PmiacunXMaRpeVT4vz5MSPSLgNkrpA==} + engines: {node: '>=12.22.0'} hasBin: true + peerDependencies: + fibers: '>= 3.1.0' + node-sass: ^6.0.0 || ^7.0.0 + react: ^17.0.2 || ^18.0.0-0 + react-dom: ^17.0.2 || ^18.0.0-0 + sass: ^1.3.0 + peerDependenciesMeta: + fibers: + optional: true + node-sass: + optional: true + sass: + optional: true dependencies: - abbrev: 1.1.1 - dev: true + '@next/env': 12.2.5 + '@swc/helpers': 0.4.3 + caniuse-lite: 1.0.30001375 + postcss: 8.4.14 + react: 18.2.0 + react-dom: 18.2.0_react@18.2.0 + sass: 1.54.4 + styled-jsx: 5.0.4_react@18.2.0 + use-sync-external-store: 1.2.0_react@18.2.0 + optionalDependencies: + '@next/swc-android-arm-eabi': 12.2.5 + '@next/swc-android-arm64': 12.2.5 + '@next/swc-darwin-arm64': 12.2.5 + '@next/swc-darwin-x64': 12.2.5 + '@next/swc-freebsd-x64': 12.2.5 + '@next/swc-linux-arm-gnueabihf': 12.2.5 + '@next/swc-linux-arm64-gnu': 12.2.5 + '@next/swc-linux-arm64-musl': 12.2.5 + '@next/swc-linux-x64-gnu': 12.2.5 + '@next/swc-linux-x64-musl': 12.2.5 + '@next/swc-win32-arm64-msvc': 12.2.5 + '@next/swc-win32-ia32-msvc': 12.2.5 + '@next/swc-win32-x64-msvc': 12.2.5 + transitivePeerDependencies: + - '@babel/core' + - babel-plugin-macros + dev: false + + /node-abi/3.24.0: + resolution: {integrity: sha512-YPG3Co0luSu6GwOBsmIdGW6Wx0NyNDLg/hriIyDllVsNwnI6UeqaWShxC3lbH4LtEQUgoLP3XR1ndXiDAWvmRw==} + engines: {node: '>=10'} + dependencies: + semver: 7.3.7 + dev: false + + /node-addon-api/5.0.0: + resolution: {integrity: sha512-CvkDw2OEnme7ybCykJpVcKH+uAOLV2qLqiyla128dN9TkEWfrYmxG6C2boDe5KcNQqZF3orkqzGgOMvZ/JNekA==} + dev: false /normalize-path/3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} - /normalize-url/4.5.1: - resolution: {integrity: sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==} - engines: {node: '>=8'} - dev: true - /nth-check/2.1.1: resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} dependencies: @@ -1145,50 +1700,97 @@ packages: /object-assign/4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} - dev: false + dev: true /object-inspect/1.12.2: resolution: {integrity: sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==} - dev: false + dev: true - /on-finished/2.3.0: - resolution: {integrity: sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==} - engines: {node: '>= 0.8'} + /object-keys/1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + dev: true + + /object.assign/4.1.3: + resolution: {integrity: sha512-ZFJnX3zltyjcYJL0RoCJuzb+11zWGyaDbjgxZbdV7rFEcHQuYxrZqhow67aA7xpes6LhojyFDaBKAFfogQrikA==} + engines: {node: '>= 0.4'} dependencies: - ee-first: 1.1.1 - dev: false + call-bind: 1.0.2 + define-properties: 1.1.4 + has-symbols: 1.0.3 + object-keys: 1.1.1 + dev: true - /on-finished/2.4.1: - resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} - engines: {node: '>= 0.8'} + /object.entries/1.1.5: + resolution: {integrity: sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==} + engines: {node: '>= 0.4'} dependencies: - ee-first: 1.1.1 - dev: false + call-bind: 1.0.2 + define-properties: 1.1.4 + es-abstract: 1.20.1 + dev: true - /on-headers/1.0.2: - resolution: {integrity: sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==} - engines: {node: '>= 0.8'} - dev: false + /object.fromentries/2.0.5: + resolution: {integrity: sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.4 + es-abstract: 1.20.1 + dev: true + + /object.hasown/1.1.1: + resolution: {integrity: sha512-LYLe4tivNQzq4JdaWW6WO3HMZZJWzkkH8fnI6EebWl0VZth2wL2Lovm74ep2/gZzlaTdV62JZHEqHQ2yVn8Q/A==} + dependencies: + define-properties: 1.1.4 + es-abstract: 1.20.1 + dev: true + + /object.values/1.1.5: + resolution: {integrity: sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.4 + es-abstract: 1.20.1 + dev: true /once/1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} dependencies: wrappy: 1.0.2 - dev: true - /p-cancelable/1.1.0: - resolution: {integrity: sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==} - engines: {node: '>=6'} - dev: true - - /package-json/6.5.0: - resolution: {integrity: sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==} - engines: {node: '>=8'} + /optionator/0.9.1: + resolution: {integrity: sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==} + engines: {node: '>= 0.8.0'} dependencies: - got: 9.6.0 - registry-auth-token: 4.2.1 - registry-url: 5.1.0 - semver: 6.3.0 + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + word-wrap: 1.2.3 + dev: true + + /p-limit/3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + dependencies: + yocto-queue: 0.1.0 + dev: true + + /p-locate/5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + dependencies: + p-limit: 3.1.0 + dev: true + + /parent-module/1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + dependencies: + callsites: 3.1.0 dev: true /parse5-htmlparser2-tree-adapter/7.0.0: @@ -1201,176 +1803,98 @@ packages: /parse5/7.0.0: resolution: {integrity: sha512-y/t8IXSPWTuRZqXc0ajH/UwDj4mnqLEbSttNbThcFhGrZuOyoyvNBO85PBp2jQa55wY9d07PBNjsK8ZP3K5U6g==} dependencies: - entities: 4.3.0 + entities: 4.3.1 dev: false - /parseurl/1.3.3: - resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} - engines: {node: '>= 0.8'} - dev: false + /path-exists/4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + dev: true + + /path-is-absolute/1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + dev: true + + /path-key/3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + dev: true /path-parse/1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - dev: false + dev: true - /path-to-regexp/0.1.7: - resolution: {integrity: sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=} + /path-type/4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + dev: true + + /picocolors/1.0.0: + resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} dev: false /picomatch/2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} - /prepend-http/2.0.0: - resolution: {integrity: sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==} - engines: {node: '>=4'} + /postcss/8.4.14: + resolution: {integrity: sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==} + engines: {node: ^10 || ^12 || >=14} + dependencies: + nanoid: 3.3.4 + picocolors: 1.0.0 + source-map-js: 1.0.2 + dev: false + + /prebuild-install/7.1.1: + resolution: {integrity: sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==} + engines: {node: '>=10'} + hasBin: true + dependencies: + detect-libc: 2.0.1 + expand-template: 2.0.3 + github-from-package: 0.0.0 + minimist: 1.2.6 + mkdirp-classic: 0.5.3 + napi-build-utils: 1.0.2 + node-abi: 3.24.0 + pump: 3.0.0 + rc: 1.2.8 + simple-get: 4.0.1 + tar-fs: 2.1.1 + tunnel-agent: 0.6.0 + dev: false + + /prelude-ls/1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} dev: true - /promise/7.3.1: - resolution: {integrity: sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==} - dependencies: - asap: 2.0.6 - dev: false - - /proxy-addr/2.0.7: - resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} - engines: {node: '>= 0.10'} - dependencies: - forwarded: 0.2.0 - ipaddr.js: 1.9.1 - dev: false - - /pstree.remy/1.1.8: - resolution: {integrity: sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==} - dev: true - - /pug-attrs/3.0.0: - resolution: {integrity: sha512-azINV9dUtzPMFQktvTXciNAfAuVh/L/JCl0vtPCwvOA21uZrC08K/UnmrL+SXGEVc1FwzjW62+xw5S/uaLj6cA==} - dependencies: - constantinople: 4.0.1 - js-stringify: 1.0.2 - pug-runtime: 3.0.1 - dev: false - - /pug-code-gen/3.0.2: - resolution: {integrity: sha512-nJMhW16MbiGRiyR4miDTQMRWDgKplnHyeLvioEJYbk1RsPI3FuA3saEP8uwnTb2nTJEKBU90NFVWJBk4OU5qyg==} - dependencies: - constantinople: 4.0.1 - doctypes: 1.1.0 - js-stringify: 1.0.2 - pug-attrs: 3.0.0 - pug-error: 2.0.0 - pug-runtime: 3.0.1 - void-elements: 3.1.0 - with: 7.0.2 - dev: false - - /pug-error/2.0.0: - resolution: {integrity: sha512-sjiUsi9M4RAGHktC1drQfCr5C5eriu24Lfbt4s+7SykztEOwVZtbFk1RRq0tzLxcMxMYTBR+zMQaG07J/btayQ==} - dev: false - - /pug-filters/4.0.0: - resolution: {integrity: sha512-yeNFtq5Yxmfz0f9z2rMXGw/8/4i1cCFecw/Q7+D0V2DdtII5UvqE12VaZ2AY7ri6o5RNXiweGH79OCq+2RQU4A==} - dependencies: - constantinople: 4.0.1 - jstransformer: 1.0.0 - pug-error: 2.0.0 - pug-walk: 2.0.0 - resolve: 1.22.0 - dev: false - - /pug-lexer/5.0.1: - resolution: {integrity: sha512-0I6C62+keXlZPZkOJeVam9aBLVP2EnbeDw3An+k0/QlqdwH6rv8284nko14Na7c0TtqtogfWXcRoFE4O4Ff20w==} - dependencies: - character-parser: 2.2.0 - is-expression: 4.0.0 - pug-error: 2.0.0 - dev: false - - /pug-linker/4.0.0: - resolution: {integrity: sha512-gjD1yzp0yxbQqnzBAdlhbgoJL5qIFJw78juN1NpTLt/mfPJ5VgC4BvkoD3G23qKzJtIIXBbcCt6FioLSFLOHdw==} - dependencies: - pug-error: 2.0.0 - pug-walk: 2.0.0 - dev: false - - /pug-load/3.0.0: - resolution: {integrity: sha512-OCjTEnhLWZBvS4zni/WUMjH2YSUosnsmjGBB1An7CsKQarYSWQ0GCVyd4eQPMFJqZ8w9xgs01QdiZXKVjk92EQ==} + /prop-types/15.8.1: + resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} dependencies: + loose-envify: 1.4.0 object-assign: 4.1.1 - pug-walk: 2.0.0 - dev: false - - /pug-parser/6.0.0: - resolution: {integrity: sha512-ukiYM/9cH6Cml+AOl5kETtM9NR3WulyVP2y4HOU45DyMim1IeP/OOiyEWRr6qk5I5klpsBnbuHpwKmTx6WURnw==} - dependencies: - pug-error: 2.0.0 - token-stream: 1.0.0 - dev: false - - /pug-runtime/3.0.1: - resolution: {integrity: sha512-L50zbvrQ35TkpHwv0G6aLSuueDRwc/97XdY8kL3tOT0FmhgG7UypU3VztfV/LATAvmUfYi4wNxSajhSAeNN+Kg==} - dev: false - - /pug-strip-comments/2.0.0: - resolution: {integrity: sha512-zo8DsDpH7eTkPHCXFeAk1xZXJbyoTfdPlNR0bK7rpOMuhBYb0f5qUVCO1xlsitYd3w5FQTK7zpNVKb3rZoUrrQ==} - dependencies: - pug-error: 2.0.0 - dev: false - - /pug-walk/2.0.0: - resolution: {integrity: sha512-yYELe9Q5q9IQhuvqsZNwA5hfPkMJ8u92bQLIMcsMxf/VADjNtEYptU+inlufAFYcWdHlwNfZOEnOOQrZrcyJCQ==} - dev: false - - /pug/3.0.2: - resolution: {integrity: sha512-bp0I/hiK1D1vChHh6EfDxtndHji55XP/ZJKwsRqrz6lRia6ZC2OZbdAymlxdVFwd1L70ebrVJw4/eZ79skrIaw==} - dependencies: - pug-code-gen: 3.0.2 - pug-filters: 4.0.0 - pug-lexer: 5.0.1 - pug-linker: 4.0.0 - pug-load: 3.0.0 - pug-parser: 6.0.0 - pug-runtime: 3.0.1 - pug-strip-comments: 2.0.0 - dev: false + react-is: 16.13.1 + dev: true /pump/3.0.0: resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} dependencies: end-of-stream: 1.4.4 once: 1.4.0 + dev: false + + /punycode/2.1.1: + resolution: {integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==} + engines: {node: '>=6'} dev: true - /pupa/2.1.1: - resolution: {integrity: sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==} - engines: {node: '>=8'} - dependencies: - escape-goat: 2.1.1 + /queue-microtask/1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} dev: true - /qs/6.10.3: - resolution: {integrity: sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==} - engines: {node: '>=0.6'} - dependencies: - side-channel: 1.0.4 - dev: false - - /range-parser/1.2.1: - resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} - engines: {node: '>= 0.6'} - dev: false - - /raw-body/2.5.1: - resolution: {integrity: sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==} - engines: {node: '>= 0.8'} - dependencies: - bytes: 3.1.2 - http-errors: 2.0.0 - iconv-lite: 0.4.24 - unpipe: 1.0.0 - dev: false - /rc/1.2.8: resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} hasBin: true @@ -1379,76 +1903,121 @@ packages: ini: 1.3.8 minimist: 1.2.6 strip-json-comments: 2.0.1 + dev: false + + /react-dom/18.2.0_react@18.2.0: + resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==} + peerDependencies: + react: ^18.2.0 + dependencies: + loose-envify: 1.4.0 + react: 18.2.0 + scheduler: 0.23.0 + dev: false + + /react-is/16.13.1: + resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} dev: true + /react/18.2.0: + resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} + engines: {node: '>=0.10.0'} + dependencies: + loose-envify: 1.4.0 + dev: false + + /readable-stream/3.6.0: + resolution: {integrity: sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==} + engines: {node: '>= 6'} + dependencies: + inherits: 2.0.4 + string_decoder: 1.3.0 + util-deprecate: 1.0.2 + dev: false + /readdirp/3.6.0: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} engines: {node: '>=8.10.0'} dependencies: picomatch: 2.3.1 - /registry-auth-token/4.2.1: - resolution: {integrity: sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==} - engines: {node: '>=6.0.0'} - dependencies: - rc: 1.2.8 + /regenerator-runtime/0.13.9: + resolution: {integrity: sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==} dev: true - /registry-url/5.1.0: - resolution: {integrity: sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==} + /regexp.prototype.flags/1.4.3: + resolution: {integrity: sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.4 + functions-have-names: 1.2.3 + dev: true + + /regexpp/3.2.0: + resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==} engines: {node: '>=8'} - dependencies: - rc: 1.2.8 dev: true - /resolve/1.22.0: - resolution: {integrity: sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==} + /resolve-from/4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + dev: true + + /resolve/1.22.1: + resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==} hasBin: true dependencies: - is-core-module: 2.9.0 + is-core-module: 2.10.0 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - dev: false - - /responselike/1.0.2: - resolution: {integrity: sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=} - dependencies: - lowercase-keys: 1.0.1 dev: true - /safe-buffer/5.1.2: - resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} - dev: false + /resolve/2.0.0-next.4: + resolution: {integrity: sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==} + hasBin: true + dependencies: + is-core-module: 2.10.0 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + dev: true + + /reusify/1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + dev: true + + /rimraf/3.0.2: + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + hasBin: true + dependencies: + glob: 7.2.3 + dev: true + + /run-parallel/1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + dependencies: + queue-microtask: 1.2.3 + dev: true /safe-buffer/5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} dev: false - /safer-buffer/2.1.2: - resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - dev: false - - /sass/1.52.2: - resolution: {integrity: sha512-mfHB2VSeFS7sZlPv9YohB9GB7yWIgQNTGniQwfQ04EoQN0wsQEv7SwpCwy/x48Af+Z3vDeFXz+iuXM3HK/phZQ==} + /sass/1.54.4: + resolution: {integrity: sha512-3tmF16yvnBwtlPrNBHw/H907j8MlOX8aTBnlNX1yrKx24RKcJGPyLhFUwkoKBKesR3unP93/2z14Ll8NicwQUA==} engines: {node: '>=12.0.0'} hasBin: true dependencies: chokidar: 3.5.3 immutable: 4.1.0 source-map-js: 1.0.2 - dev: false - /semver-diff/3.1.1: - resolution: {integrity: sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==} - engines: {node: '>=8'} + /scheduler/0.23.0: + resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==} dependencies: - semver: 6.3.0 - dev: true - - /semver/5.7.1: - resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==} - hasBin: true - dev: true + loose-envify: 1.4.0 + dev: false /semver/6.3.0: resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==} @@ -1461,76 +2030,104 @@ packages: hasBin: true dependencies: lru-cache: 6.0.0 + + /sharp/0.31.0: + resolution: {integrity: sha512-ft96f8WzGxavg0rkLpMw90MTPMUZDyf0tHjPPh8Ob59xt6KzX8EqtotcqZGUm7kwqpX2pmYiyYX2LL0IZ/FDEw==} + engines: {node: '>=14.15.0'} + requiresBuild: true + dependencies: + color: 4.2.3 + detect-libc: 2.0.1 + node-addon-api: 5.0.0 + prebuild-install: 7.1.1 + semver: 7.3.7 + simple-get: 4.0.1 + tar-fs: 2.1.1 + tunnel-agent: 0.6.0 + dev: false + + /shebang-command/2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + dependencies: + shebang-regex: 3.0.0 dev: true - /send/0.18.0: - resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} - engines: {node: '>= 0.8.0'} - dependencies: - debug: 2.6.9 - depd: 2.0.0 - destroy: 1.2.0 - encodeurl: 1.0.2 - escape-html: 1.0.3 - etag: 1.8.1 - fresh: 0.5.2 - http-errors: 2.0.0 - mime: 1.6.0 - ms: 2.1.3 - on-finished: 2.4.1 - range-parser: 1.2.1 - statuses: 2.0.1 - transitivePeerDependencies: - - supports-color - dev: false - - /serve-static/1.15.0: - resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==} - engines: {node: '>= 0.8.0'} - dependencies: - encodeurl: 1.0.2 - escape-html: 1.0.3 - parseurl: 1.3.3 - send: 0.18.0 - transitivePeerDependencies: - - supports-color - dev: false - - /setprototypeof/1.2.0: - resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} - dev: false + /shebang-regex/3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + dev: true /side-channel/1.0.4: resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} dependencies: call-bind: 1.0.2 - get-intrinsic: 1.1.1 + get-intrinsic: 1.1.2 object-inspect: 1.12.2 + dev: true + + /simple-concat/1.0.1: + resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==} dev: false - /signal-exit/3.0.7: - resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + /simple-get/4.0.1: + resolution: {integrity: sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==} + dependencies: + decompress-response: 6.0.0 + once: 1.4.0 + simple-concat: 1.0.1 + dev: false + + /simple-swizzle/0.2.2: + resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} + dependencies: + is-arrayish: 0.3.2 + dev: false + + /slash/3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} dev: true /source-map-js/1.0.2: resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} engines: {node: '>=0.10.0'} - dev: false - /statuses/2.0.1: - resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} - engines: {node: '>= 0.8'} - dev: false - - /string-width/4.2.3: - resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} - engines: {node: '>=8'} + /string.prototype.matchall/4.0.7: + resolution: {integrity: sha512-f48okCX7JiwVi1NXCVWcFnZgADDC/n2vePlQ/KUCNqCikLLilQvwjMO8+BHVKvgzH0JB0J9LEPgxOGT02RoETg==} dependencies: - emoji-regex: 8.0.0 - is-fullwidth-code-point: 3.0.0 - strip-ansi: 6.0.1 + call-bind: 1.0.2 + define-properties: 1.1.4 + es-abstract: 1.20.1 + get-intrinsic: 1.1.2 + has-symbols: 1.0.3 + internal-slot: 1.0.3 + regexp.prototype.flags: 1.4.3 + side-channel: 1.0.4 dev: true + /string.prototype.trimend/1.0.5: + resolution: {integrity: sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==} + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.4 + es-abstract: 1.20.1 + dev: true + + /string.prototype.trimstart/1.0.5: + resolution: {integrity: sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==} + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.4 + es-abstract: 1.20.1 + dev: true + + /string_decoder/1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + dependencies: + safe-buffer: 5.2.1 + dev: false + /strip-ansi/6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} @@ -1538,18 +2135,37 @@ packages: ansi-regex: 5.0.1 dev: true - /strip-json-comments/2.0.1: - resolution: {integrity: sha1-PFMZQukIwml8DsNEhYwobHygpgo=} - engines: {node: '>=0.10.0'} + /strip-bom/3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} dev: true - /supports-color/5.5.0: - resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} - engines: {node: '>=4'} - dependencies: - has-flag: 3.0.0 + /strip-json-comments/2.0.1: + resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} + engines: {node: '>=0.10.0'} + dev: false + + /strip-json-comments/3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} dev: true + /styled-jsx/5.0.4_react@18.2.0: + resolution: {integrity: sha512-sDFWLbg4zR+UkNzfk5lPilyIgtpddfxXEULxhujorr5jtePTUqiPDc5BC0v1NRqTr/WaFBGQQUoYToGlF4B2KQ==} + engines: {node: '>= 12.0.0'} + peerDependencies: + '@babel/core': '*' + babel-plugin-macros: '*' + react: '>= 16.8.0 || 17.x.x || ^18.0.0-0' + peerDependenciesMeta: + '@babel/core': + optional: true + babel-plugin-macros: + optional: true + dependencies: + react: 18.2.0 + dev: false + /supports-color/7.2.0: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} @@ -1560,16 +2176,30 @@ packages: /supports-preserve-symlinks-flag/1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} + dev: true + + /tar-fs/2.1.1: + resolution: {integrity: sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==} + dependencies: + chownr: 1.1.4 + mkdirp-classic: 0.5.3 + pump: 3.0.0 + tar-stream: 2.2.0 dev: false - /to-fast-properties/2.0.0: - resolution: {integrity: sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=} - engines: {node: '>=4'} - dev: false - - /to-readable-stream/1.0.0: - resolution: {integrity: sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==} + /tar-stream/2.2.0: + resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} engines: {node: '>=6'} + dependencies: + bl: 4.1.0 + end-of-stream: 1.4.4 + fs-constants: 1.0.0 + inherits: 2.0.4 + readable-stream: 3.6.0 + dev: false + + /text-table/0.2.0: + resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} dev: true /to-regex-range/5.0.1: @@ -1578,147 +2208,118 @@ packages: dependencies: is-number: 7.0.0 - /toidentifier/1.0.1: - resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} - engines: {node: '>=0.6'} - dev: false - - /token-stream/1.0.0: - resolution: {integrity: sha1-zCAOqyYT9BZtJ/+a/HylbUnfbrQ=} - dev: false - - /touch/3.1.0: - resolution: {integrity: sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==} - hasBin: true + /tsconfig-paths/3.14.1: + resolution: {integrity: sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==} dependencies: - nopt: 1.0.10 + '@types/json5': 0.0.29 + json5: 1.0.1 + minimist: 1.2.6 + strip-bom: 3.0.0 + dev: true + + /tslib/1.14.1: + resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} dev: true /tslib/2.4.0: resolution: {integrity: sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==} dev: false + /tsutils/3.21.0_typescript@4.7.4: + resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} + engines: {node: '>= 6'} + peerDependencies: + typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' + dependencies: + tslib: 1.14.1 + typescript: 4.7.4 + dev: true + + /tunnel-agent/0.6.0: + resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} + dependencies: + safe-buffer: 5.2.1 + dev: false + + /type-check/0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + dependencies: + prelude-ls: 1.2.1 + dev: true + /type-fest/0.20.2: resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} engines: {node: '>=10'} dev: true - /type-is/1.6.18: - resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} - engines: {node: '>= 0.6'} + /typescript/4.7.4: + resolution: {integrity: sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==} + engines: {node: '>=4.2.0'} + hasBin: true + dev: true + + /unbox-primitive/1.0.2: + resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: - media-typer: 0.3.0 - mime-types: 2.1.35 + call-bind: 1.0.2 + has-bigints: 1.0.2 + has-symbols: 1.0.3 + which-boxed-primitive: 1.0.2 + dev: true + + /uri-js/4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + dependencies: + punycode: 2.1.1 + dev: true + + /use-sync-external-store/1.2.0_react@18.2.0: + resolution: {integrity: sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + dependencies: + react: 18.2.0 dev: false - /typedarray-to-buffer/3.1.5: - resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} - dependencies: - is-typedarray: 1.0.0 - dev: true - - /undefsafe/2.0.5: - resolution: {integrity: sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==} - dev: true - - /unique-string/2.0.0: - resolution: {integrity: sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==} - engines: {node: '>=8'} - dependencies: - crypto-random-string: 2.0.0 - dev: true - - /unpipe/1.0.0: - resolution: {integrity: sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=} - engines: {node: '>= 0.8'} + /util-deprecate/1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} dev: false - /update-notifier/5.1.0: - resolution: {integrity: sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==} - engines: {node: '>=10'} - dependencies: - boxen: 5.1.2 - chalk: 4.1.2 - configstore: 5.0.1 - has-yarn: 2.1.0 - import-lazy: 2.1.0 - is-ci: 2.0.0 - is-installed-globally: 0.4.0 - is-npm: 5.0.0 - is-yarn-global: 0.3.0 - latest-version: 5.1.0 - pupa: 2.1.1 - semver: 7.3.7 - semver-diff: 3.1.1 - xdg-basedir: 4.0.0 + /v8-compile-cache/2.3.0: + resolution: {integrity: sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==} dev: true - /url-parse-lax/3.0.0: - resolution: {integrity: sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=} - engines: {node: '>=4'} + /which-boxed-primitive/1.0.2: + resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} dependencies: - prepend-http: 2.0.0 + is-bigint: 1.0.4 + is-boolean-object: 1.1.2 + is-number-object: 1.0.7 + is-string: 1.0.7 + is-symbol: 1.0.4 dev: true - /utils-merge/1.0.1: - resolution: {integrity: sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=} - engines: {node: '>= 0.4.0'} - dev: false + /which/2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + dependencies: + isexe: 2.0.0 + dev: true - /vary/1.1.2: - resolution: {integrity: sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=} - engines: {node: '>= 0.8'} - dev: false - - /void-elements/3.1.0: - resolution: {integrity: sha1-YU9/v42AHwu18GYfWy9XhXUOTwk=} + /word-wrap/1.2.3: + resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} engines: {node: '>=0.10.0'} - dev: false - - /widest-line/3.1.0: - resolution: {integrity: sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==} - engines: {node: '>=8'} - dependencies: - string-width: 4.2.3 - dev: true - - /with/7.0.2: - resolution: {integrity: sha512-RNGKj82nUPg3g5ygxkQl0R937xLyho1J24ItRCBTr/m1YnZkzJy1hUiHUJrc/VlsDQzsCnInEGSg3bci0Lmd4w==} - engines: {node: '>= 10.0.0'} - dependencies: - '@babel/parser': 7.18.4 - '@babel/types': 7.18.4 - assert-never: 1.2.1 - babel-walk: 3.0.0-canary-5 - dev: false - - /wrap-ansi/7.0.0: - resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} - engines: {node: '>=10'} - dependencies: - ansi-styles: 4.3.0 - string-width: 4.2.3 - strip-ansi: 6.0.1 dev: true /wrappy/1.0.2: - resolution: {integrity: sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=} - dev: true - - /write-file-atomic/3.0.3: - resolution: {integrity: sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==} - dependencies: - imurmurhash: 0.1.4 - is-typedarray: 1.0.0 - signal-exit: 3.0.7 - typedarray-to-buffer: 3.1.5 - dev: true - - /xdg-basedir/4.0.0: - resolution: {integrity: sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==} - engines: {node: '>=8'} - dev: true + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} /yallist/4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + + /yocto-queue/0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} dev: true diff --git a/public/android-chrome-192x192.png b/public/android-chrome-192x192.png deleted file mode 100644 index 805dc09..0000000 Binary files a/public/android-chrome-192x192.png and /dev/null differ diff --git a/public/android-chrome-512x512.png b/public/android-chrome-512x512.png deleted file mode 100644 index 8be0071..0000000 Binary files a/public/android-chrome-512x512.png and /dev/null differ diff --git a/public/apple-touch-icon.png b/public/apple-touch-icon.png index bf7d796..f5400cb 100644 Binary files a/public/apple-touch-icon.png and b/public/apple-touch-icon.png differ diff --git a/public/browserconfig.xml b/public/browserconfig.xml deleted file mode 100644 index e8b57e5..0000000 --- a/public/browserconfig.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - #b91d47 - - - diff --git a/public/favicon-16x16.png b/public/favicon-16x16.png deleted file mode 100644 index d374411..0000000 Binary files a/public/favicon-16x16.png and /dev/null differ diff --git a/public/favicon-32x32.png b/public/favicon-32x32.png deleted file mode 100644 index dbfdfe8..0000000 Binary files a/public/favicon-32x32.png and /dev/null differ diff --git a/public/favicon.ico b/public/favicon.ico index 3f0bcda..bcf10e2 100644 Binary files a/public/favicon.ico and b/public/favicon.ico differ diff --git a/public/font/Montserrat-Bold.woff2 b/public/font/Montserrat-Bold.woff2 deleted file mode 100644 index b1e1d21..0000000 Binary files a/public/font/Montserrat-Bold.woff2 and /dev/null differ diff --git a/public/font/Montserrat-Italic.woff2 b/public/font/Montserrat-Italic.woff2 deleted file mode 100644 index c358d40..0000000 Binary files a/public/font/Montserrat-Italic.woff2 and /dev/null differ diff --git a/public/font/Montserrat-Light.woff2 b/public/font/Montserrat-Light.woff2 deleted file mode 100644 index 8add7d7..0000000 Binary files a/public/font/Montserrat-Light.woff2 and /dev/null differ diff --git a/public/font/Montserrat-Regular.woff2 b/public/font/Montserrat-Regular.woff2 deleted file mode 100644 index d7dd638..0000000 Binary files a/public/font/Montserrat-Regular.woff2 and /dev/null differ diff --git a/public/font/Montserrat-SemiBold.woff2 b/public/font/Montserrat-SemiBold.woff2 deleted file mode 100644 index 2c9e8ff..0000000 Binary files a/public/font/Montserrat-SemiBold.woff2 and /dev/null differ diff --git a/public/font/NunitoSans-Bold.woff2 b/public/font/NunitoSans-Bold.woff2 deleted file mode 100644 index 583ae7e..0000000 Binary files a/public/font/NunitoSans-Bold.woff2 and /dev/null differ diff --git a/public/font/NunitoSans-Italic.woff2 b/public/font/NunitoSans-Italic.woff2 deleted file mode 100644 index c426c59..0000000 Binary files a/public/font/NunitoSans-Italic.woff2 and /dev/null differ diff --git a/public/font/NunitoSans-Light.woff2 b/public/font/NunitoSans-Light.woff2 deleted file mode 100644 index a1fc7cc..0000000 Binary files a/public/font/NunitoSans-Light.woff2 and /dev/null differ diff --git a/public/font/NunitoSans-Regular.woff2 b/public/font/NunitoSans-Regular.woff2 deleted file mode 100644 index bcf581a..0000000 Binary files a/public/font/NunitoSans-Regular.woff2 and /dev/null differ diff --git a/public/font/NunitoSans-SemiBold.woff2 b/public/font/NunitoSans-SemiBold.woff2 deleted file mode 100644 index 2e99173..0000000 Binary files a/public/font/NunitoSans-SemiBold.woff2 and /dev/null differ diff --git a/public/fonts/RedHatDisplay-Italic-VariableFont_wght.ttf b/public/fonts/RedHatDisplay-Italic-VariableFont_wght.ttf new file mode 100644 index 0000000..fe9207f Binary files /dev/null and b/public/fonts/RedHatDisplay-Italic-VariableFont_wght.ttf differ diff --git a/public/fonts/RedHatDisplay-VariableFont_wght.ttf b/public/fonts/RedHatDisplay-VariableFont_wght.ttf new file mode 100644 index 0000000..fc290e8 Binary files /dev/null and b/public/fonts/RedHatDisplay-VariableFont_wght.ttf differ diff --git a/public/icon-192.png b/public/icon-192.png new file mode 100644 index 0000000..f16ca82 Binary files /dev/null and b/public/icon-192.png differ diff --git a/public/icon-512.png b/public/icon-512.png new file mode 100644 index 0000000..c71dce0 Binary files /dev/null and b/public/icon-512.png differ diff --git a/public/icon.svg b/public/icon.svg new file mode 100644 index 0000000..9f6ed54 --- /dev/null +++ b/public/icon.svg @@ -0,0 +1,10 @@ + + + + + + + + diff --git a/public/img/contact/email.png b/public/img/contact/email.png deleted file mode 100755 index e0fe721..0000000 Binary files a/public/img/contact/email.png and /dev/null differ diff --git a/public/img/contact/matrix.png b/public/img/contact/matrix.png deleted file mode 100755 index 9604c76..0000000 Binary files a/public/img/contact/matrix.png and /dev/null differ diff --git a/public/img/misc/preview.png b/public/img/misc/preview.png index 8f34c8b..b2346fe 100644 Binary files a/public/img/misc/preview.png and b/public/img/misc/preview.png differ diff --git a/public/img/misc/preview2.png b/public/img/misc/preview2.png new file mode 100644 index 0000000..00fb9b1 Binary files /dev/null and b/public/img/misc/preview2.png differ diff --git a/public/js/index.js b/public/js/index.js deleted file mode 100644 index 04f2f24..0000000 --- a/public/js/index.js +++ /dev/null @@ -1,35 +0,0 @@ -const rootEl = document.documentElement; -const input = document.querySelector('.theme-switcher__input'); - -// adding this property insures that the media query for dark mode in css won't be executed. We'll use media query from js instead. Toggle without this line would also work just fine. But then light would actually mean dark and vice-versa. -rootEl.setAttribute('js', 'enabled'); - -// function for adding or removing the theme(and checked state for checkbox) accordingly -const toggleTheme = theme => { - if (theme === 'dark') { - rootEl.setAttribute('theme', 'dark'); - input.setAttribute('checked', ''); - } else if (theme === 'light') { - rootEl.removeAttribute('theme'); - input.removeAttribute('checked'); - } -}; - -// storing user and browser preferences -const userPrefersTheme = typeof Storage ? localStorage.getItem('theme') : null; -const browserPrefersDarkTheme = window.matchMedia( - '(prefers-color-scheme: dark)' -).matches; - -// setting theme taking into account calculated preferences -if (userPrefersTheme) toggleTheme(userPrefersTheme); -else if (browserPrefersDarkTheme) toggleTheme('dark'); - -// setting theme when user toggles the theme-switcher input(and storing the preference in localStorage) -input.addEventListener('change', e => { - let theme = e.target.checked ? 'dark' : 'light'; - toggleTheme(theme); - localStorage.setItem('theme', theme); -}); - -// localStorage.removeItem("theme"); diff --git a/public/mstile-150x150.png b/public/mstile-150x150.png deleted file mode 100644 index cf8fd10..0000000 Binary files a/public/mstile-150x150.png and /dev/null differ diff --git a/public/robots.txt b/public/robots.txt index 6ffbc30..1504053 100644 --- a/public/robots.txt +++ b/public/robots.txt @@ -1,3 +1,3 @@ User-agent: * +Allow: /about Disallow: / - diff --git a/public/safari-pinned-tab.svg b/public/safari-pinned-tab.svg deleted file mode 100644 index cd4b096..0000000 --- a/public/safari-pinned-tab.svg +++ /dev/null @@ -1,61 +0,0 @@ - - - - -Created by potrace 1.14, written by Peter Selinger 2001-2017 - - - - - - diff --git a/public/site.webmanifest b/public/site.webmanifest index 6c2e375..0cc98ee 100644 --- a/public/site.webmanifest +++ b/public/site.webmanifest @@ -3,18 +3,18 @@ "short_name": "libremdb", "icons": [ { - "src": "/android-chrome-192x192.png", + "src": "/icon-192.png", "sizes": "192x192", "type": "image/png", "purpose": "any maskable" }, { - "src": "/android-chrome-512x512.png", + "src": "/icon-512.png", "sizes": "512x512", "type": "image/png", "purpose": "any maskable" } ], - "theme_color": "#0f2c67", - "background_color": "#0f2c67" + "theme_color": "#b80040", + "background_color": "#ffe5ef" } diff --git a/public/svg/sadgnu.svg b/public/svg/sadgnu.svg new file mode 100644 index 0000000..80be29c --- /dev/null +++ b/public/svg/sadgnu.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + diff --git a/public/img/misc/sprite.svg b/public/svg/sprite.svg similarity index 79% rename from public/img/misc/sprite.svg rename to public/svg/sprite.svg index ef3fcd9..954d6fc 100644 --- a/public/img/misc/sprite.svg +++ b/public/svg/sprite.svg @@ -1,6 +1,8 @@ - + + + GNU and Tux + + A pencil drawing of a big gnu and a small penguin, both very sad. + GNU is despondently sitting on a bench, and Tux stands beside him, + looking down and patting him on the back. + + + +

+ {message} + ({statusCode}) +

+

+ Go back to{' '} + + the homepage + + . +

+
+ + ); +}; +export default ErrorInfo; diff --git a/src/components/Meta/Meta.tsx b/src/components/Meta/Meta.tsx new file mode 100644 index 0000000..d6c7062 --- /dev/null +++ b/src/components/Meta/Meta.tsx @@ -0,0 +1,40 @@ +import Head from 'next/head'; + +type Props = { + title: string; + description?: string; + imgUrl?: string; +}; + +const Meta = ({ + title, + description = 'libremdb, a free & open source IMDb front-end.', + imgUrl = 'icon.svg', +}: Props) => { + return ( + + + + + + {`${title} | libremdb`} + + + + + + + + + + + + + + + ); +}; +export default Meta; diff --git a/src/components/buttons/ThemeToggler.tsx b/src/components/buttons/ThemeToggler.tsx new file mode 100644 index 0000000..52f2157 --- /dev/null +++ b/src/components/buttons/ThemeToggler.tsx @@ -0,0 +1,35 @@ +import { useContext } from 'react'; +import { themeContext } from '../../context/theme-context'; + +import styles from '../../styles/modules/components/buttons/themeToggler.module.scss'; + +type Props = { + className: string; +}; + +const ThemeToggler = (props: Props) => { + const { theme, setTheme } = useContext(themeContext); + const clickHandler = () => { + const themeToSet = theme === 'light' ? 'dark' : 'light'; + setTheme(themeToSet); + }; + + return ( + + ); +}; + +export default ThemeToggler; diff --git a/src/components/loaders/ProgressBar.tsx b/src/components/loaders/ProgressBar.tsx new file mode 100644 index 0000000..c09d3ba --- /dev/null +++ b/src/components/loaders/ProgressBar.tsx @@ -0,0 +1,6 @@ +import styles from '../../styles/modules/components/loaders/progress-bar.module.scss'; + +const ProgressBar = () => { + return ; +}; +export default ProgressBar; diff --git a/src/components/title/Basic.tsx b/src/components/title/Basic.tsx new file mode 100644 index 0000000..acc990e --- /dev/null +++ b/src/components/title/Basic.tsx @@ -0,0 +1,153 @@ +import { Fragment } from 'react'; +import Image from 'next/future/image'; +import Link from 'next/link'; + +import { formatNumber, formatTime, modifyIMDbImg } from '../../utils/helpers'; +import { Basic } from '../../interfaces/shared/title'; +import styles from '../../styles/modules/components/title/basic.module.scss'; + +type Props = { + className: string; + data: Basic; +}; + +const Basic = ({ data, className }: Props) => { + const titleType = data.type.id; + const releaseTime = + titleType === 'tvSeries' + ? `${data.releaseYear?.start}-${data.releaseYear?.end || 'present'}` + : data.releaseYear?.start; + + return ( +
+
+ {data.poster ? ( + {data.poster.caption} + ) : ( + + + + )} +
+
+

+ {data.title} +

+
    + {data.status.id !== 'released' && ( +
  • {data.status.text}
  • + )} +
  • {data.type.name}
  • + {data.releaseYear && ( +
  • {releaseTime}
  • + )} + {data.ceritficate && ( +
  • {data.ceritficate}
  • + )} + {data.runtime && ( +
  • {formatTime(data.runtime)}
  • + )} +
+
+ {data.ratings.avg && ( + <> +

+ {data.ratings.avg} + + + + Avg. rating +

+

+ + {formatNumber(data.ratings.numVotes)} + + + + + No. of votes +

+ + )} + {data.ranking && ( +

+ + {formatNumber(data.ranking.position)} + + + + + + {' '} + Popularity ( + + {data.ranking.direction === 'UP' + ? `\u2191${formatNumber(data.ranking.change)}` + : data.ranking.direction === 'DOWN' + ? `\u2193${formatNumber(data.ranking.change)}` + : ''} + + ) + +

+ )} +
+ + {!!data.genres.length && ( +

+ Genres: + {data.genres.map((genre, i) => ( + + {i > 0 && ', '} + + {genre.text} + + + ))} +

+ )} + { +

+ Plot: + {data.plot || '-'} +

+ } + {data.primaryCrew.map(crewType => ( +

+ + {`${crewType.type.category}: `} + + {crewType.crew.map((crew, i) => ( + + {i > 0 && ', '} + + {crew.name} + + + ))} +

+ ))} +
+
+ ); +}; + +export default Basic; diff --git a/src/components/title/Cast.tsx b/src/components/title/Cast.tsx new file mode 100644 index 0000000..4a6f15f --- /dev/null +++ b/src/components/title/Cast.tsx @@ -0,0 +1,56 @@ +import Image from 'next/future/image'; +import Link from 'next/link'; +import { Cast } from '../../interfaces/shared/title'; +import { modifyIMDbImg } from '../../utils/helpers'; + +import styles from '../../styles/modules/components/title/cast.module.scss'; + +type Props = { + className: string; + cast: Cast; +}; + +const Cast = ({ className, cast }: Props) => { + if (!cast.length) return <>; + + return ( +
+

Cast

+
    + {cast.map(member => ( +
  • +
    + {member.image ? ( + + ) : ( + + + + )} +
    +
    +

    + + {member.name} + +

    +

    + {member.characters?.join(', ')} + {member.attributes && ( + ({member.attributes.join(', ')}) + )} +

    +
    +
  • + ))} +
+
+ ); +}; +export default Cast; diff --git a/src/components/title/DidYouKnow.tsx b/src/components/title/DidYouKnow.tsx new file mode 100644 index 0000000..ad78c6f --- /dev/null +++ b/src/components/title/DidYouKnow.tsx @@ -0,0 +1,106 @@ +import Link from 'next/link'; +import { Fragment } from 'react'; +import { DidYouKnow } from '../../interfaces/shared/title'; +import styles from '../../styles/modules/components/title/did-you-know.module.scss'; + +type Props = { + data: DidYouKnow; +}; + +const DidYouKnow = ({ data }: Props) => { + if (!Object.keys(data).length) return <>; + return ( +
+

Did you know

+
+ {data.trivia && ( +
+

Trivia

+
+
+ )} + {data.goofs && ( +
+

Goofs

+
+
+ )} + {data.quotes?.lines.length && ( + // html spec says not to use blockquote & cite for conversations, even though it seems a perfect choice here. + // see 'note' part https://html.spec.whatwg.org/multipage/grouping-content.html#the-blockquote-element +
+

Quotes

+ {data.quotes.lines.map((line, i) => ( +
+

+ {line.name && ( + + {line.name} + + )} + {line.stageDirection && [{line.stageDirection}] } + {line.text && : {line.text}} +

+
+ ))} +
+ )} + {data.crazyCredits && ( +
+

Crazy credits

+
+
+ )} + {data.alternativeVersions && ( +
+

Alternate versions

+
+
+ )} + {data.connections && ( +
+

Connections

+

+ {data.connections.startText} + + {data.connections.title.text} + + ({data.connections.title.year}) +

+
+ )} + {data.soundTrack && ( +
+

Soundtracks

+
+

{data.soundTrack.title}

+ {data.soundTrack.htmls && + data.soundTrack.htmls.map(html => ( +
+ ))} +
+
+ )} +
+
+ ); +}; +export default DidYouKnow; diff --git a/src/components/title/Info.tsx b/src/components/title/Info.tsx new file mode 100644 index 0000000..daf3d3b --- /dev/null +++ b/src/components/title/Info.tsx @@ -0,0 +1,333 @@ +import Link from 'next/link'; +import { NextRouter } from 'next/router'; +import { Info } from '../../interfaces/shared/title'; +import { formatMoney, formatTime } from '../../utils/helpers'; + +import styles from '../../styles/modules/components/title/info.module.scss'; + +type Props = { + info: Info; + className: string; + router: NextRouter; +}; + +const Info = ({ info, className, router }: Props) => { + const { titleId } = router.query; + const { boxOffice, details, meta, keywords, technicalSpecs, accolades } = + info; + + return ( +
+ {meta.infoEpisode && ( +
+

Episode info

+
+ {meta.infoEpisode.numSeason && ( +

+ Season: + {meta.infoEpisode.numSeason} +

+ )} + {meta.infoEpisode.numEpisode && ( +

+ Episode: + {meta.infoEpisode.numEpisode} +

+ )} +

+ Series: + + + {meta.infoEpisode.series.title} + + + {' '} + ({meta.infoEpisode.series.startYear}- + {meta.infoEpisode.series.endYear || 'present'}) + + +

+ {meta.infoEpisode.prevId && ( +

+ + Go to previous episode + +

+ )} + {meta.infoEpisode.nextId && ( +

+ + Go to next episode + +

+ )} +
+
+ )} + {meta.infoSeries && ( +
+

Series info

+
+

+ Total Seasons: + {meta.infoSeries.seasons.length} +

+

+ Total Years: + {meta.infoSeries.years.length} +

+

+ Total Episodes: + {meta.infoSeries.totalEpisodes} +

+

+ + See all Episodes + +

+
+
+ )} +
+

Accolades

+
+ {accolades.topRating && ( +

+ + Top rated (#{accolades.topRating}) + +

+ )} + {accolades.awards && ( +

+ + Won {accolades.awards.wins} {accolades.awards.name} + + (out of {accolades.awards.nominations} nominations) +

+ )} +

+ {accolades.wins} wins and {accolades.nominations} nominations in + total +

+

+ + View all awards + +

+
+
+ {!!keywords.total && ( +
+

Keywords

+
    + {keywords.list.map(word => ( +
  • + + {word} + +
  • + ))} +
+
+ )} + {!!Object.keys(details).length && ( +
+

Details

+
+ {details.releaseDate && ( +

+ Release date: + + ({details.releaseDate.country.text}) +

+ )} + + {details.countriesOfOrigin && ( +

+ Countries of origin: + {details.countriesOfOrigin.map((country, i) => ( + + {!!i && ', '} + + {country.text} + + + ))} +

+ )} + {details.officialSites && ( +

+ Official sites: + {details.officialSites.sites.map((site, i) => ( + + {!!i && ', '} + + {site.name} + + + ))} +

+ )} + {details.languages?.length && ( +

+ Languages: + {details.languages.map((lang, i) => ( + + {!!i && ', '} + + {lang.text} + + + ))} +

+ )} + {details.alsoKnownAs && ( +

+ Also known as: + {details.alsoKnownAs} +

+ )} + {details.filmingLocations?.total && ( +

+ Filming locations: + {details.filmingLocations.locations.map((loc, i) => ( + + {!!i && ', '} + + {loc} + + + ))} +

+ )} + {!!details.production?.total && ( +

+ Production companies: + {details.production.companies.map((co, i) => ( + + {!!i && ', '} + + {co.name} + + + ))} +

+ )} +
+
+ )} + {!!Object.keys(boxOffice).length && ( +
+

Box office

+
+ {boxOffice.budget && ( +

+ Budget: + + {formatMoney( + boxOffice.budget.amount, + boxOffice.budget.currency + )} + +

+ )} + {boxOffice.grossUs && ( +

+ Gross US & Canada: + + {formatMoney( + boxOffice.grossUs.amount, + boxOffice.grossUs.currency + )} + +

+ )} + {boxOffice.openingGrossUs && ( +

+ Opening weekend US & Canada: + + {formatMoney( + boxOffice.openingGrossUs.amount, + boxOffice.openingGrossUs.currency + )} + ({boxOffice.openingGrossUs.date}) + +

+ )} + {boxOffice.gross && ( +

+ Gross worldwide: + + {formatMoney( + boxOffice.gross.amount, + boxOffice.gross.currency + )} + +

+ )} +
+
+ )} + {!!Object.keys(technicalSpecs).length && ( +
+

Technical specs

+
+ {technicalSpecs.runtime && ( +

+ Runtime: + {formatTime(technicalSpecs.runtime)} +

+ )} + {!!technicalSpecs.colorations?.length && ( +

+ Color: + + {technicalSpecs.colorations.map((color, i) => ( + + {!!i && ', '} + + {color.name} + + + ))} + +

+ )} + {!!technicalSpecs.soundMixes?.length && ( +

+ Sound mix: + + {technicalSpecs.soundMixes?.map((sound, i) => ( + + {!!i && ', '} + + {sound.name} + + + ))} + +

+ )} + {!!technicalSpecs.aspectRatios?.length && ( +

+ Aspect ratio: + {technicalSpecs.aspectRatios.join(', ')} +

+ )} +
+
+ )} +
+ ); +}; +export default Info; diff --git a/src/components/title/Media.tsx b/src/components/title/Media.tsx new file mode 100644 index 0000000..583aa17 --- /dev/null +++ b/src/components/title/Media.tsx @@ -0,0 +1,90 @@ +import Image from 'next/future/image'; +import Link from 'next/link'; +import { NextRouter } from 'next/router'; +import { Media } from '../../interfaces/shared/title'; +import { modifyIMDbImg } from '../../utils/helpers'; + +import styles from '../../styles/modules/components/title/media.module.scss'; + +type Props = { + className: string; + media: Media; + router: NextRouter; +}; + +const Media = ({ className, media, router }: Props) => { + return ( +
+ {(media.trailer || !!media.videos.total) && ( +
+

Videos

+ +
+ {media.trailer && ( +
+ +
+ )} + + {!!media.videos.total && + media.videos.videos.map(video => ( + + + +

+ {video.caption} ({video.runtime}s) +

+
+ + ))} +
+
+ )} + {!!media.images.total && ( +
+

Images

+
+ {media.images.images.map(image => ( +
+ +
+ {image.caption.plainText} +
+
+ ))} +
+
+ )} +
+ ); +}; +export default Media; diff --git a/src/components/title/MoreLikeThis.tsx b/src/components/title/MoreLikeThis.tsx new file mode 100644 index 0000000..e6b78d9 --- /dev/null +++ b/src/components/title/MoreLikeThis.tsx @@ -0,0 +1,64 @@ +import Image from 'next/future/image'; +import Link from 'next/link'; +import { MoreLikeThis } from '../../interfaces/shared/title'; +import { formatNumber, modifyIMDbImg } from '../../utils/helpers'; +import styles from '../../styles/modules/components/title/more-like-this.module.scss'; + +type Props = { + className: string; + data: MoreLikeThis; +}; + +const MoreLikeThis = ({ className, data }: Props) => { + if (!data.length) return <>; + + return ( +
+

More like this

+ +
+ ); +}; +export default MoreLikeThis; diff --git a/src/components/title/Reviews.tsx b/src/components/title/Reviews.tsx new file mode 100644 index 0000000..9a47c53 --- /dev/null +++ b/src/components/title/Reviews.tsx @@ -0,0 +1,82 @@ +import { NextRouter } from 'next/router'; +import Link from 'next/link'; +import { Reviews } from '../../interfaces/shared/title'; +import { formatNumber } from '../../utils/helpers'; +import styles from '../../styles/modules/components/title/reviews.module.scss'; + +type Props = { + reviews: Reviews; + router: NextRouter; +}; + +const Reviews = ({ reviews, router }: Props) => { + const { titleId } = router.query; + + return ( +
+

Reviews

+ + {reviews.featuredReview && ( +
+
+ + {reviews.featuredReview.review.summary} + +
+
+
+

+ {reviews.featuredReview.rating && ( + Rated {reviews.featuredReview.rating}/10 + )} + + {' '} + by{' '} + + {reviews.featuredReview.reviewer.name} + + + on {reviews.featuredReview.date}. +

+

+ + {formatNumber(reviews.featuredReview.votes.up)} upvotes + + + , {formatNumber(reviews.featuredReview.votes.down)} downvotes + +

+
+
+ )} + +
+

+ + + {formatNumber(reviews.numUserReviews)} User reviews + + +

+

+ + + {formatNumber(reviews.numCriticReviews)} Critic reviews + + +

+

+ + {reviews.metacriticScore} Metascore + +

+
+
+ ); +}; +export default Reviews; diff --git a/src/context/theme-context.tsx b/src/context/theme-context.tsx new file mode 100644 index 0000000..69b9d96 --- /dev/null +++ b/src/context/theme-context.tsx @@ -0,0 +1,55 @@ +import React, { useState, createContext, ReactNode } from 'react'; + +const getInitialTheme = () => { + // for server-side rendering, as window isn't availabe there + if (typeof window === 'undefined') return 'light'; + + const userPrefersTheme = window.localStorage.getItem('theme') || null; + const browserPrefersDarkTheme = window.matchMedia( + '(prefers-color-scheme: dark)' + ).matches; + + if (userPrefersTheme) return userPrefersTheme; + else if (browserPrefersDarkTheme) return 'dark'; + else return 'light'; +}; + +const updateMetaTheme = () => { + const meta = document.querySelector( + 'meta[name="theme-color"]' + ) as HTMLMetaElement; + const footerClr = window.getComputedStyle(document.body).backgroundColor; + + meta.content = footerClr; +}; + +const initialContext = { + theme: '', + setTheme: (theme: string) => {}, +}; + +export const themeContext = createContext(initialContext); + +const ThemeProvider = ({ children }: { children: ReactNode }) => { + const [curTheme, setCurTheme] = useState(getInitialTheme); + + const setTheme = (theme: string) => { + setCurTheme(theme); + window.localStorage.setItem('theme', theme); + document.documentElement.dataset.theme = theme; + updateMetaTheme(); + }; + + const providerValue = { + theme: curTheme, + setTheme: setTheme, + }; + + return ( + + {children} + + ); +}; + +export default ThemeProvider; diff --git a/src/interfaces/misc/rawTitle.ts b/src/interfaces/misc/rawTitle.ts new file mode 100644 index 0000000..632f945 --- /dev/null +++ b/src/interfaces/misc/rawTitle.ts @@ -0,0 +1,832 @@ +export default interface RawTitle { + props: { + pageProps: { + aboveTheFoldData: { + id: string; + productionStatus: { + currentProductionStage: { + id: string; + text: string; + }; + productionStatusHistory?: Array<{ + status: { + id: string; + text: string; + }; + }>; + restriction?: { + restrictionReason: Array; + unrestrictedTotal: number; + }; + }; + canHaveEpisodes: boolean; + series?: { + episodeNumber: { + episodeNumber: number; + seasonNumber: number; + }; + nextEpisode: { + id: string; + }; + previousEpisode: + | { + id: string; + } + | undefined; + series: { + id: string; + titleText: { + text: string; + }; + originalTitleText: { + text: string; + }; + titleType: { + id: string; + }; + releaseYear: { + year: number; + endYear: any; + }; + }; + }; + titleText: { + text: string; + }; + titleType: { + text: string; + id: string; + isSeries: boolean; + isEpisode: boolean; + }; + originalTitleText: { + text: string; + }; + certificate?: { + rating: string; + }; + releaseYear?: { + year: number; + endYear: any; + }; + releaseDate?: { + day: number; + month: number; + year: number; + }; + runtime?: { + seconds: number; + }; + canRate: { + isRatable: boolean; + }; + ratingsSummary: { + aggregateRating?: number; + voteCount: number; + }; + meterRanking?: { + currentRank: number; + rankChange: { + changeDirection: string; + difference: number; + }; + }; + primaryImage?: { + id: string; + width: number; + height: number; + url: string; + caption: { + plainText: string; + }; + }; + images: { + total: number; + }; + videos: { + total: number; + }; + primaryVideos: { + edges: Array<{ + node: { + id: string; + isMature: boolean; + contentType: { + id: string; + displayName: { + value: string; + }; + }; + thumbnail: { + url: string; + height: number; + width: number; + }; + runtime: { + value: number; + }; + description: { + value: string; + language: string; + }; + name: { + value: string; + language: string; + }; + playbackURLs: Array<{ + displayName: { + value: string; + language: string; + }; + mimeType: string; + url: string; + }>; + previewURLs: Array<{ + displayName: { + value: string; + language: string; + }; + mimeType: string; + url: string; + }>; + }; + }>; + }; + externalLinks: { + total: number; + }; + metacritic?: { + metascore: { + score: number; + }; + }; + keywords: { + total: number; + edges: Array<{ + node: { + text: string; + }; + }>; + }; + genres: { + genres: Array<{ + text: string; + id: string; + }>; + }; + plot?: { + plotText?: { + plainText: string; + }; + language?: { + id: string; + }; + }; + plotContributionLink: { + url: string; + }; + credits: { + total: number; + }; + principalCredits: Array<{ + totalCredits: number; + category: { + text: string; + id: string; + }; + credits: Array<{ + name: { + nameText: { + text: string; + }; + id: string; + }; + attributes?: Array<{ + text: string; + }>; + }>; + }>; + reviews: { + total: number; + }; + criticReviewsTotal: { + total: number; + }; + triviaTotal: { + total: number; + }; + meta: { + canonicalId: string; + publicationStatus: string; + }; + castPageTitle: { + edges: Array<{ + node: { + name: { + nameText: { + text: string; + }; + }; + }; + }>; + }; + creatorsPageTitle: Array<{ + credits: Array<{ + name: { + nameText: { + text: string; + }; + }; + }>; + }>; + directorsPageTitle: Array<{ + credits: Array<{ + name: { + nameText: { + text: string; + }; + }; + }>; + }>; + countriesOfOrigin?: { + countries: Array<{ + id: string; + }>; + }; + production: { + edges: Array<{ + node: { + company: { + id: string; + companyText: { + text: string; + }; + }; + }; + }>; + }; + featuredReviews: { + edges: Array<{ + node: { + author: { + nickName: string; + }; + summary: { + originalText: string; + }; + text: { + originalText: { + plainText: string; + }; + }; + authorRating: number; + submissionDate: string; + }; + }>; + }; + }; + mainColumnData: { + id: string; + wins: { + total: number; + }; + nominations: { + total: number; + }; + prestigiousAwardSummary?: { + nominations: number; + wins: number; + award: { + text: string; + id: string; + event: { + id: string; + }; + }; + }; + ratingsSummary: { + topRanking?: { + id: string; + text: { + value: string; + }; + rank: number; + }; + }; + episodes?: { + episodes: { + total: number; + }; + seasons: Array<{ + number: number; + }>; + years: Array<{ + year: number; + }>; + totalEpisodes: { + total: number; + }; + topRated: { + edges: Array<{ + node: { + ratingsSummary: { + aggregateRating: number; + }; + }; + }>; + }; + }; + videos: { + total: number; + }; + videoStrip: { + edges: Array<{ + node: { + id: string; + contentType: { + displayName: { + value: string; + }; + }; + name: { + value: string; + }; + runtime: { + value: number; + }; + thumbnail: { + height: number; + url: string; + width: number; + }; + }; + }>; + }; + titleMainImages: { + total: number; + edges: Array<{ + node: { + id: string; + url: string; + caption: { + plainText: string; + }; + height: number; + width: number; + }; + }>; + }; + productionStatus: { + currentProductionStage: { + id: string; + text: string; + }; + productionStatusHistory?: Array<{ + status: { + id: string; + text: string; + }; + }>; + restriction?: { + restrictionReason: Array; + }; + }; + primaryImage?: { + id: string; + }; + imageUploadLink?: { + url: string; + }; + titleType: { + id: string; + canHaveEpisodes: boolean; + }; + cast: { + edges: Array<{ + node: { + name: { + id: string; + nameText: { + text: string; + }; + primaryImage?: { + url: string; + width: number; + height: number; + }; + }; + attributes?: Array<{ + text: string; + }>; + characters?: Array<{ + name: string; + }>; + episodeCredits: { + total: number; + yearRange?: { + year: number; + endYear: number; + }; + }; + }; + }>; + }; + creators: Array<{ + totalCredits: number; + category: { + text: string; + }; + credits: Array<{ + name: { + id: string; + nameText: { + text: string; + }; + }; + attributes: any; + }>; + }>; + directors: Array<{ + totalCredits: number; + category: { + text: string; + }; + credits: Array<{ + name: { + id: string; + nameText: { + text: string; + }; + }; + attributes: any; + }>; + }>; + writers: Array<{ + totalCredits: number; + category: { + text: string; + }; + credits: Array<{ + name: { + id: string; + nameText: { + text: string; + }; + }; + attributes?: Array<{ + text: string; + }>; + }>; + }>; + isAdult: boolean; + moreLikeThisTitles: { + edges: Array<{ + node: { + id: string; + titleText: { + text: string; + }; + titleType: { + id: string; + text: string; + }; + originalTitleText: { + text: string; + }; + primaryImage?: { + id: string; + width: number; + height: number; + url: string; + }; + releaseYear?: { + year: number; + endYear?: number; + }; + ratingsSummary: { + aggregateRating?: number; + voteCount: number; + }; + runtime?: { + seconds: number; + }; + certificate?: { + rating: string; + }; + canRate: { + isRatable: boolean; + }; + titleCardGenres: { + genres: Array<{ + text: string; + }>; + }; + canHaveEpisodes: boolean; + }; + }>; + }; + triviaTotal: { + total: number; + }; + trivia: { + edges: Array<{ + node: { + text: { + plaidHtml: string; + }; + trademark: any; + relatedNames: any; + }; + }>; + }; + goofsTotal: { + total: number; + }; + goofs: { + edges: Array<{ + node: { + text: { + plaidHtml: string; + }; + }; + }>; + }; + quotesTotal: { + total: number; + }; + quotes: { + edges: Array<{ + node: { + lines: Array<{ + characters?: Array<{ + character: string; + name?: { + id: string; + }; + }>; + text: string; + stageDirection?: string; + }>; + }; + }>; + }; + crazyCredits: { + edges: Array<{ + node: { + text: { + plaidHtml: string; + }; + }; + }>; + }; + alternateVersions: { + total: number; + edges: Array<{ + node: { + text: { + plaidHtml: string; + }; + }; + }>; + }; + connections: { + edges: Array<{ + node: { + associatedTitle: { + id: string; + releaseYear: { + year: number; + }; + titleText: { + text: string; + }; + originalTitleText: { + text: string; + }; + series: any; + }; + category: { + text: string; + }; + }; + }>; + }; + soundtrack: { + edges: Array<{ + node: { + text: string; + comments?: Array<{ + plaidHtml: string; + }>; + }; + }>; + }; + titleText: { + text: string; + }; + originalTitleText: { + text: string; + }; + releaseYear?: { + year: number; + }; + reviews: { + total: number; + }; + featuredReviews: { + edges: Array<{ + node: { + id: string; + author: { + nickName: string; + userId: string; + }; + summary: { + originalText: string; + }; + text: { + originalText: { + plaidHtml: string; + }; + }; + authorRating: number; + submissionDate: string; + helpfulness: { + upVotes: number; + downVotes: number; + }; + }; + }>; + }; + canRate: { + isRatable: boolean; + }; + iframeAddReviewLink: { + url: string; + }; + faqsTotal: { + total: number; + }; + faqs: { + edges: Array<{ + node: { + id: string; + question: { + plainText: string; + }; + }; + }>; + }; + releaseDate?: { + day: number; + month: number; + year: number; + country: { + id: string; + text: string; + }; + }; + countriesOfOrigin?: { + countries: Array<{ + id: string; + text: string; + }>; + }; + detailsExternalLinks: { + edges: Array<{ + node: { + url: string; + label: string; + externalLinkRegion?: { + text: string; + }; + }; + }>; + total: number; + }; + spokenLanguages: { + spokenLanguages: Array<{ + id: string; + text: string; + }>; + }; + akas: { + edges: Array<{ + node: { + text: string; + }; + }>; + }; + filmingLocations: { + edges: Array<{ + node: { + text: string; + }; + }>; + total: number; + }; + production: { + edges: Array<{ + node: { + company: { + id: string; + companyText: { + text: string; + }; + }; + }; + }>; + }; + companies: { + total: number; + }; + productionBudget?: { + budget: { + amount: number; + currency: string; + }; + }; + lifetimeGross?: { + total: { + amount: number; + currency: string; + }; + }; + openingWeekendGross?: { + gross: { + total: { + amount: number; + currency: string; + }; + }; + weekendEndDate: string; + }; + worldwideGross?: { + total: { + amount: number; + currency: string; + }; + }; + technicalSpecifications: { + soundMixes: { + items: Array<{ + id: string; + text: string; + attributes: Array; + }>; + }; + aspectRatios: { + items: Array<{ + aspectRatio: string; + attributes: Array; + }>; + }; + colorations: { + items: Array<{ + conceptId: string; + text: string; + attributes: Array; + }>; + }; + }; + runtime?: { + seconds: number; + }; + series?: { + series: { + runtime?: { + seconds: number; + }; + }; + }; + canHaveEpisodes: boolean; + contributionQuestions: { + contributionLink: { + url: string; + }; + edges: Array<{ + node: { + entity: { + primaryImage?: { + url: string; + width: number; + height: number; + caption: { + plainText: string; + }; + }; + }; + questionId: string; + questionText: { + plainText: string; + }; + contributionLink: { + url: string; + }; + }; + }>; + }; + }; + }; + }; +} diff --git a/src/interfaces/shared/error.ts b/src/interfaces/shared/error.ts new file mode 100644 index 0000000..477d852 --- /dev/null +++ b/src/interfaces/shared/error.ts @@ -0,0 +1,5 @@ +export type AppError = { + message: string; + statusCode: number; + stack?: any; +}; diff --git a/src/interfaces/shared/title.ts b/src/interfaces/shared/title.ts new file mode 100644 index 0000000..fba696a --- /dev/null +++ b/src/interfaces/shared/title.ts @@ -0,0 +1,25 @@ +import cleanTitle from '../../utils/cleaners/title'; +import title from '../../utils/fetchers/title'; + +export type AxiosTitleRes = Awaited>; + +// for full title +type Title = ReturnType; +export type { Title as default }; + +export type Basic = Title['basic']; + +export type Media = Title['media']; + +export type Cast = Title['cast']; + +export type DidYouKnow = Title['didYouKnow']; + +export type Info = Pick< + Title, + 'meta' | 'accolades' | 'keywords' | 'details' | 'boxOffice' | 'technicalSpecs' +>; + +export type Reviews = Title['reviews']; + +export type MoreLikeThis = Title['moreLikeThis']; diff --git a/src/layouts/Footer.tsx b/src/layouts/Footer.tsx new file mode 100644 index 0000000..63c1d5f --- /dev/null +++ b/src/layouts/Footer.tsx @@ -0,0 +1,52 @@ +import { FC } from 'react'; +import Link from 'next/link'; +import { useRouter } from 'next/router'; + +import styles from '../styles/modules/layout/footer.module.scss'; + +const Footer: FC = () => { + const { pathname } = useRouter(); + const className = (link: string) => + pathname === link ? styles.nav__linkActive : styles.nav__link; + + return ( + + ); +}; + +export default Footer; diff --git a/src/layouts/Header.tsx b/src/layouts/Header.tsx new file mode 100644 index 0000000..db1700a --- /dev/null +++ b/src/layouts/Header.tsx @@ -0,0 +1,86 @@ +import { ReactNode } from 'react'; +// import dynamic from 'next/dynamic'; +import Link from 'next/link'; +import styles from '../styles/modules/layout/header.module.scss'; +import ThemeToggler from '../components/buttons/ThemeToggler'; + +// const ThemeToggler = dynamic( +// () => import('../components/buttons/ThemeToggler'), +// { ssr: false } +// ); + +type Props = { full?: boolean; children?: ReactNode }; + +const Header = (props: Props) => { + return ( + + ); +}; + +export default Header; diff --git a/src/layouts/Layout.tsx b/src/layouts/Layout.tsx new file mode 100644 index 0000000..e037738 --- /dev/null +++ b/src/layouts/Layout.tsx @@ -0,0 +1,23 @@ +import React from 'react'; +import Footer from './Footer'; +import Header from './Header'; + +type Props = { + full?: boolean; + children: React.ReactNode; + className: string; +}; + +const Layout = ({ full, children, className }: Props) => { + return ( + <> +
+
+ {children} +
+