From 002d19604a4d9289586f433950e4d539622a04fb Mon Sep 17 00:00:00 2001 From: Zi Nean Teoh <58854510+zineanteoh@users.noreply.github.com> Date: Sat, 7 Oct 2023 15:15:29 -0500 Subject: [PATCH] Settings hackathon (#370) * enable intellisence for css via typescript-plugin-css-modules * big brain moment with types. refactor fn to return ThemedClass type instead of generic string * fix import styles errors that arose thanks to typescript-plugin-css-modules * implement model and api for hackathon-settings * implement hackathon settings to view/change important dates * fix codeql vuln * install dayjs bc antd wants it :( * why do timezones even exist zzzzzz --- .vscode/settings.json | 3 +- components/Organizer/OrganizerDash.tsx | 2 +- .../SettingsTab/HackathonSettings.tsx | 118 ++++++ .../Organizer/SettingsTab/SettingsTab.tsx | 9 +- components/hacker/HackerDash.tsx | 38 +- components/judges/JudgeDash.tsx | 2 +- models/hackathon.ts | 11 + package.json | 4 +- pages/api/hackathon-settings.ts | 64 ++++ theme/themeProvider.tsx | 7 +- tsconfig.json | 7 +- types/database.ts | 9 + yarn.lock | 361 +++++++++++++++++- 13 files changed, 583 insertions(+), 52 deletions(-) create mode 100644 components/Organizer/SettingsTab/HackathonSettings.tsx create mode 100644 models/hackathon.ts create mode 100644 pages/api/hackathon-settings.ts diff --git a/.vscode/settings.json b/.vscode/settings.json index d40a89f0..83bf9064 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,3 +1,4 @@ { - "deepscan.enable": true + "deepscan.enable": true, + "typescript.tsdk": "node_modules/typescript/lib" } diff --git a/components/Organizer/OrganizerDash.tsx b/components/Organizer/OrganizerDash.tsx index 154da183..b3865f92 100644 --- a/components/Organizer/OrganizerDash.tsx +++ b/components/Organizer/OrganizerDash.tsx @@ -41,7 +41,7 @@ export default function OrganizerDash() { if (!userData) return ; return ( -
+

Organizer Dashboard

diff --git a/components/Organizer/SettingsTab/HackathonSettings.tsx b/components/Organizer/SettingsTab/HackathonSettings.tsx new file mode 100644 index 00000000..9fb7f845 --- /dev/null +++ b/components/Organizer/SettingsTab/HackathonSettings.tsx @@ -0,0 +1,118 @@ +import { Button, DatePicker, Space } from 'antd'; +import dayjs from 'dayjs'; +import React, { useContext, useEffect, useState } from 'react'; +import { handleSubmitFailure, handleSubmitSuccess } from '../../../lib/helpers'; +import { getBaseColor, ThemeContext } from '../../../theme/themeProvider'; +import { HackathonSettingsData } from '../../../types/database'; + +const HackathonSettings = () => { + const { baseTheme } = useContext(ThemeContext); + const [hackathonSetting, setHackathonSetting] = useState(undefined); + const [loading, setLoading] = useState(false); + const [statusMessage, setStatusMessage] = useState(''); + + // fetch hackathon settings on load at /api/hackathon-settings + useEffect(() => { + const fetchHackathonSettings = async () => { + const res = await fetch('/api/hackathon-settings'); + if (res.ok) { + const settings = await res.json(); + setHackathonSetting(settings as HackathonSettingsData); + setLoading(false); + } + }; + setLoading(true); + fetchHackathonSettings(); + }, []); + + // handle save button + const handleSave = async () => { + if ( + window.confirm( + 'IMPORTANT: \nAre you sure you wish to save these dates?\nMake sure you know what you are doing!' + ) + ) { + const res = await fetch('/api/hackathon-settings', { + method: 'PATCH', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify(hackathonSetting), + }); + if (res.ok) { + const settings = await res.json(); + setHackathonSetting(settings as HackathonSettingsData); + setStatusMessage('Successfully saved to database!'); + handleSubmitSuccess('Successfully saved to database!'); + } else { + setStatusMessage('Failed to save to database!'); + handleSubmitFailure('Failed to save to database!'); + } + } + }; + + const handleHackathonChange = (_: any, dateStrings: [string, string]) => { + const newHackathonStart = dayjs(dateStrings[0], 'MM-DD-YYYY hh:mm A').format('MM/DD/YYYY hh:mm A'); + const newHackathonEnd = dayjs(dateStrings[1], { utc: true }).format('MM/DD/YYYY hh:mm A'); + console.log('Changing Hackathon: ', newHackathonStart); + console.log('Changing Hackathon: ', newHackathonEnd); + setHackathonSetting(prev => { + if (prev) + return { + ...prev, + HACKATHON_START: newHackathonStart, + HACKATHON_END: newHackathonEnd, + }; + return undefined; + }); + setStatusMessage('Changes not saved yet.'); + }; + + const handleJudgingChange = (_: any, dateStrings: [string, string]) => { + const newJudgingStart = dayjs(dateStrings[0], { utc: true }).format('MM/DD/YYYY hh:mm A'); + const newJudgingEnd = dayjs(dateStrings[1], { utc: true }).format('MM/DD/YYYY hh:mm A'); + setHackathonSetting(prev => { + if (prev) + return { + ...prev, + JUDGING_START: newJudgingStart, + JUDGING_END: newJudgingEnd, + }; + return undefined; + }); + setStatusMessage('Changes not saved yet.'); + }; + + if (loading) return
Loading...
; + + return ( +
+
Hackathon Start & End
+ + +
+ +
Judging Start & End
+ + +
+
+ + + + {statusMessage &&
{statusMessage}
} +
+ ); +}; + +export default HackathonSettings; diff --git a/components/Organizer/SettingsTab/SettingsTab.tsx b/components/Organizer/SettingsTab/SettingsTab.tsx index b04d2f98..ac0bcf70 100644 --- a/components/Organizer/SettingsTab/SettingsTab.tsx +++ b/components/Organizer/SettingsTab/SettingsTab.tsx @@ -1,7 +1,14 @@ +import HackathonSettings from './HackathonSettings'; import ThemeControl from './ThemeControl'; const SettingsTab = () => { - return ; + return ( + <> + +
+ + + ); }; export default SettingsTab; diff --git a/components/hacker/HackerDash.tsx b/components/hacker/HackerDash.tsx index 6f77a0c0..4e1cb772 100644 --- a/components/hacker/HackerDash.tsx +++ b/components/hacker/HackerDash.tsx @@ -231,27 +231,21 @@ export default function HackerDash({ userApplicationStatus, setUserApplicationSt
First Name

} name="firstName" rules={[{ required: true, message: 'Please input your first name!' }]}>
Last Name

} name="lastName" rules={[{ required: true, message: 'Please input your last name!' }]}>
- Preferred Name

} - name="preferredName"> + Preferred Name

} name="preferredName">
Gender

} name="gender" rules={[{ required: true, message: 'Please select an option!' }]}> @@ -263,35 +257,30 @@ export default function HackerDash({ userApplicationStatus, setUserApplicationSt
Date of Birth

} rules={[{ required: true, message: 'Please select your date of birth!' }]}>
Phone Number

} name="phoneNumber" rules={[{ required: true, message: 'Please input your phone number!' }]}>
School

} name="school" rules={[{ required: true, message: 'Please input your school!' }]}>
Major

} name="major" rules={[{ required: true, message: 'Please input your major!' }]}>
Graduation Year

} name="graduationYear" rules={[{ required: true, message: 'Please select your graduation year!' }]}> @@ -304,21 +293,16 @@ export default function HackerDash({ userApplicationStatus, setUserApplicationSt
Address Line 1

} name="address1" rules={[{ required: true, message: 'Please input your address!' }]}>
- Address Line 2

} - name="address2"> + Address Line 2

} name="address2">
City

} name={'city'} rules={[{ required: true, message: 'Please input your city!' }]}> @@ -326,7 +310,6 @@ export default function HackerDash({ userApplicationStatus, setUserApplicationSt
State

} name={'state'} rules={[{ required: true, message: 'Please input your state!' }]}> @@ -334,7 +317,6 @@ export default function HackerDash({ userApplicationStatus, setUserApplicationSt
ZIP Code

} name={'zip'} rules={[ @@ -355,20 +337,17 @@ export default function HackerDash({ userApplicationStatus, setUserApplicationSt
Race

} rules={[{ required: true, message: 'Please select at least one option!' }]}>
Dietary Restrictions

}>
Accommodation needs

}>
First-time hacker?

} rules={[{ required: true, message: 'Please select an option!' }]} @@ -388,7 +366,6 @@ export default function HackerDash({ userApplicationStatus, setUserApplicationSt
Why would you like to attend VandyHacks?

} rules={[ @@ -404,7 +381,6 @@ export default function HackerDash({ userApplicationStatus, setUserApplicationSt />
@@ -419,7 +395,6 @@ export default function HackerDash({ userApplicationStatus, setUserApplicationSt /> Which tech stack, if any, are you familiar with?

@@ -432,7 +407,6 @@ export default function HackerDash({ userApplicationStatus, setUserApplicationSt />
What are you passionate about?

} rules={[ @@ -445,14 +419,12 @@ export default function HackerDash({ userApplicationStatus, setUserApplicationSt />
What do you hope to gain from VandyHacks?

} rules={[{ required: true, message: 'Please select at least one option!' }]}>
Shirt Size

} name="shirtSize" rules={[{ required: true, message: 'Please select your shirt size!' }]}> @@ -466,7 +438,6 @@ export default function HackerDash({ userApplicationStatus, setUserApplicationSt
Résumé

} rules={[ { @@ -504,7 +475,6 @@ export default function HackerDash({ userApplicationStatus, setUserApplicationSt
Would you like to apply for travel reimbursements? @@ -518,7 +488,6 @@ export default function HackerDash({ userApplicationStatus, setUserApplicationSt Are you staying overnight in the venue?

@@ -530,7 +499,6 @@ export default function HackerDash({ userApplicationStatus, setUserApplicationSt
@@ -546,7 +514,6 @@ export default function HackerDash({ userApplicationStatus, setUserApplicationSt Would you like to be contacted about volunteering at the event? @@ -561,7 +528,6 @@ export default function HackerDash({ userApplicationStatus, setUserApplicationSt
+

Judging Dashboard

diff --git a/models/hackathon.ts b/models/hackathon.ts new file mode 100644 index 00000000..0eb73dc0 --- /dev/null +++ b/models/hackathon.ts @@ -0,0 +1,11 @@ +import mongoose, { Schema } from 'mongoose'; + +const HackathonSchema = new Schema({ + HACKATHON_START: { type: String, required: true }, // MM/DD/YYYY hh:mm A + HACKATHON_END: { type: String, required: true }, // MM/DD/YYYY hh:mm A + JUDGING_START: { type: String, required: true }, // MM/DD/YYYY hh:mm A + JUDGING_END: { type: String, required: true }, // MM/DD/YYYY hh:mm A +}); + +// prevent recompilation of model if it already exists +export default mongoose.models.Hackathon || mongoose.model('Hackathon', HackathonSchema); diff --git a/package.json b/package.json index 1bae5683..be4dc2d3 100644 --- a/package.json +++ b/package.json @@ -19,6 +19,7 @@ "@types/formidable": "^2.0.5", "antd": "^5.9.4", "csv-writer": "^1.6.0", + "dayjs": "^1.11.10", "dotenv": "^16.0.2", "escape-html": "^1.0.3", "export-to-csv": "^0.2.1", @@ -48,6 +49,7 @@ "eslint-config-prettier": "^8.3.0", "eslint-plugin-prettier": "^4.2.1", "prettier": "^2.6.2", - "typescript": "4.8.3" + "typescript": "4.8.3", + "typescript-plugin-css-modules": "^5.0.1" } } diff --git a/pages/api/hackathon-settings.ts b/pages/api/hackathon-settings.ts new file mode 100644 index 00000000..214e8811 --- /dev/null +++ b/pages/api/hackathon-settings.ts @@ -0,0 +1,64 @@ +import type { NextApiRequest, NextApiResponse } from 'next'; +import dbConnect from '../../middleware/database'; +import { getSession } from 'next-auth/react'; +import hackathon from '../../models/hackathon'; + +export default async function handler(req: NextApiRequest, res: NextApiResponse) { + const session = await getSession({ req }); + if (session?.userType !== 'ORGANIZER') return res.status(403).send('Forbidden'); + + await dbConnect(); + switch (req.method) { + case 'GET': + try { + const hackathonSettings = await hackathon.findOne({}); + // if no hackathon settings, return 404 + if (!hackathonSettings) return res.status(404).send('Hackathon settings not found'); + return res.status(200).json(hackathonSettings); + } catch (err) { + return res.status(500).send("Couldn't get hackathon settings"); + } + case 'PATCH': + try { + // extract variables from body + const { HACKATHON_START, HACKATHON_END, JUDGING_START, JUDGING_END } = req.body; + + // check if hackathon settings valid (must be correct format of date) + const isValid = + isSettingsValid(HACKATHON_START) && + isSettingsValid(HACKATHON_END) && + isSettingsValid(JUDGING_START) && + isSettingsValid(JUDGING_END); + + // if not valid, return 400 + if (!isValid) return res.status(400).send('Invalid hackathon settings'); + + // find the hackathon settings + const updatedHackathonSettings = await hackathon.findOneAndUpdate( + {}, + { + $set: { + HACKATHON_START, + HACKATHON_END, + JUDGING_START, + JUDGING_END, + }, + }, + { + new: true, + } + ); + + // return the updated hackathon settings + return res.status(200).json(updatedHackathonSettings); + } catch (err) { + return res.status(500).send("Couldn't get hackathon settings"); + } + default: + return res.status(405).send('Method not supported brother'); + } +} + +const isSettingsValid = (date: string) => { + return new Date(date).toString() !== 'Invalid Date'; +}; diff --git a/theme/themeProvider.tsx b/theme/themeProvider.tsx index c9654248..7006ee4b 100644 --- a/theme/themeProvider.tsx +++ b/theme/themeProvider.tsx @@ -7,6 +7,8 @@ export enum Theme { DARK = 'dark', } +export type ThemedClass = `${ClassName}-${Theme}`; + // Accent color options export enum AccentColor { BLUE = 'blue', @@ -56,7 +58,10 @@ export const ThemeProvider = ({ children }: { children: any }) => { *
* ``` */ -export const getThemedClass = (className: string, baseTheme: Theme) => { +export const getThemedClass = ( + className: ClassName, + baseTheme: Theme +): ThemedClass => { return `${className}-${baseTheme === Theme.LIGHT ? 'light' : 'dark'}`; }; diff --git a/tsconfig.json b/tsconfig.json index f0508fa8..45803302 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -15,7 +15,12 @@ "isolatedModules": true, "jsx": "preserve", "downlevelIteration": true, - "incremental": true + "incremental": true, + "plugins": [ + { + "name": "typescript-plugin-css-modules" + } + ] }, "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"], "exclude": ["node_modules"] diff --git a/types/database.ts b/types/database.ts index 6e6fd101..daeaa42a 100644 --- a/types/database.ts +++ b/types/database.ts @@ -1,3 +1,4 @@ +import { Dayjs } from 'dayjs'; import mongoose from 'mongoose'; export const enum ApplicationStatus { @@ -120,3 +121,11 @@ export interface JudgingSessionData { judge: UserData; time: String; } + +export interface HackathonSettingsData { + _id: mongoose.Schema.Types.ObjectId; + HACKATHON_START: string; // MM/DD/YYYY HH:mm A + HACKATHON_END: string; // MM/DD/YYYY hh:mm A + JUDGING_START: string; // MM/DD/YYYY hh:mm A + JUDGING_END: string; // MM/DD/YYYY hh:mm A +} diff --git a/yarn.lock b/yarn.lock index dbb128ad..41d9972f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,6 +2,11 @@ # yarn lockfile v1 +"@adobe/css-tools@^4.0.1": + version "4.3.1" + resolved "https://registry.yarnpkg.com/@adobe/css-tools/-/css-tools-4.3.1.tgz#abfccb8ca78075a2b6187345c26243c1a0842f28" + integrity sha512-/62yikz7NLScCGAAST5SHdnjaDJQBDq0M2muyRTpf2VQhw6StBg2ALiu73zSJQ4fMVLA+0uBhBHAle7Wg+2kSg== + "@ant-design/colors@^6.0.0": version "6.0.0" resolved "https://registry.npmjs.org/@ant-design/colors/-/colors-6.0.0.tgz" @@ -1594,6 +1599,20 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-20.8.0.tgz#10ddf0119cf20028781c06d7115562934e53f745" integrity sha512-LzcWltT83s1bthcvjBmiBvGJiiUe84NWRHkw+ZV6Fr41z2FbIzvc815dk2nQ3RAKMuN2fkenM/z3Xv2QzEpYxQ== +"@types/postcss-modules-local-by-default@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@types/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz#5c141c9bd3a994ae1ebe23d2ae094b24d19538f5" + integrity sha512-0VLab/pcLTLcfbxi6THSIMVYcw9hEUBGvjwwaGpW77mMgRXfGF+a76t7BxTGyLh1y68tBvrffp8UWnqvm76+yg== + dependencies: + postcss "^8.0.0" + +"@types/postcss-modules-scope@^3.0.1": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@types/postcss-modules-scope/-/postcss-modules-scope-3.0.2.tgz#add319dfc692d741dde1cc33c68b4e02b5a3f6d3" + integrity sha512-Q+OIqRncPV2WB+HXFA9WSZmIhDMUqxE5HgU81WA4oof3NutXhh8bHzB5ypbxRKi8NaPzByoSR5o9qHYW1lMOAg== + dependencies: + postcss "^8.0.0" + "@types/prop-types@*": version "15.7.5" resolved "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz" @@ -1782,6 +1801,14 @@ antd@^5.9.4: scroll-into-view-if-needed "^3.0.3" throttle-debounce "^5.0.0" +anymatch@~3.1.2: + version "3.1.3" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + argparse@^2.0.1: version "2.0.1" resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" @@ -1888,6 +1915,11 @@ base64-js@^1.3.1: resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== +binary-extensions@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + bowser@^2.11.0: version "2.11.0" resolved "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz" @@ -1901,7 +1933,7 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" -braces@^3.0.2: +braces@^3.0.2, braces@~3.0.2: version "3.0.2" resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== @@ -1963,6 +1995,21 @@ chardet@^0.7.0: resolved "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz" integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== +"chokidar@>=3.0.0 <4.0.0": + version "3.5.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" + integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + classnames@2.x, classnames@^2.2.1, classnames@^2.2.3, classnames@^2.2.5, classnames@^2.2.6, classnames@^2.3.1, classnames@^2.3.2: version "2.3.2" resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.3.2.tgz#351d813bf0137fcc6a76a16b88208d2560a0d924" @@ -2037,6 +2084,13 @@ cookie@^0.4.1: resolved "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz" integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== +copy-anything@^2.0.1: + version "2.0.6" + resolved "https://registry.yarnpkg.com/copy-anything/-/copy-anything-2.0.6.tgz#092454ea9584a7b7ad5573062b2a87f5900fc480" + integrity sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw== + dependencies: + is-what "^3.14.1" + copy-to-clipboard@^3.2.0: version "3.3.1" resolved "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.3.1.tgz" @@ -2058,6 +2112,11 @@ cross-spawn@^7.0.2: shebang-command "^2.0.0" which "^2.0.1" +cssesc@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" + integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== + csstype@^3.0.10, csstype@^3.0.2: version "3.1.0" resolved "https://registry.npmjs.org/csstype/-/csstype-3.1.0.tgz" @@ -2073,7 +2132,7 @@ damerau-levenshtein@^1.0.8: resolved "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz" integrity sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA== -dayjs@^1.11.1: +dayjs@^1.11.1, dayjs@^1.11.10: version "1.11.10" resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.10.tgz#68acea85317a6e164457d6d6947564029a6a16a0" integrity sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ== @@ -2092,7 +2151,7 @@ debug@^2.6.9: dependencies: ms "2.0.0" -debug@^3.2.7: +debug@^3.2.6, debug@^3.2.7: version "3.2.7" resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz" integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== @@ -2161,6 +2220,11 @@ dotenv@^16.0.2: resolved "https://registry.npmjs.org/dotenv/-/dotenv-16.0.2.tgz" integrity sha512-JvpYKUmzQhYoIFgK2MOnF3bciIZoItIIoryihy0rIA+H4Jy0FmgyKYAHCTN98P5ybGSJcIFbh6QKeJdtZd1qhA== +dotenv@^16.0.3: + version "16.3.1" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.3.1.tgz#369034de7d7e5b120972693352a3bf112172cc3e" + integrity sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ== + emoji-regex@^8.0.0: version "8.0.0" resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" @@ -2176,6 +2240,13 @@ entities@2.2.0: resolved "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz" integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== +errno@^0.1.1: + version "0.1.8" + resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f" + integrity sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A== + dependencies: + prr "~1.0.1" + es-abstract@^1.19.0, es-abstract@^1.19.1, es-abstract@^1.19.2, es-abstract@^1.19.5: version "1.20.1" resolved "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.1.tgz" @@ -2589,6 +2660,11 @@ fs.realpath@^1.0.0: resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== +fsevents@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" + integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== + function-bind@^1.1.1: version "1.1.1" resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" @@ -2626,7 +2702,7 @@ get-symbol-description@^1.0.0: call-bind "^1.0.2" get-intrinsic "^1.1.1" -glob-parent@^5.1.2: +glob-parent@^5.1.2, glob-parent@~5.1.2: version "5.1.2" resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== @@ -2652,7 +2728,7 @@ glob@7.1.7, glob@^7.1.3: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.2.0: +glob@^7.1.6, glob@^7.2.0: version "7.2.3" resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== @@ -2683,6 +2759,11 @@ globby@^11.1.0: merge2 "^1.4.1" slash "^3.0.0" +graceful-fs@^4.1.2: + version "4.2.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== + grapheme-splitter@^1.0.4: version "1.0.4" resolved "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz" @@ -2746,6 +2827,18 @@ iconv-lite@^0.4.24: dependencies: safer-buffer ">= 2.1.2 < 3" +iconv-lite@^0.6.3: + version "0.6.3" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" + integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + +icss-utils@^5.0.0, icss-utils@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae" + integrity sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA== + ieee754@^1.1.13: version "1.2.1" resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" @@ -2756,6 +2849,16 @@ ignore@^5.2.0: resolved "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz" integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== +image-size@~0.5.0: + version "0.5.5" + resolved "https://registry.yarnpkg.com/image-size/-/image-size-0.5.5.tgz#09dfd4ab9d20e29eb1c3e80b8990378df9e3cb9c" + integrity sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ== + +immutable@^4.0.0: + version "4.3.4" + resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.3.4.tgz#2e07b33837b4bb7662f288c244d1ced1ef65a78f" + integrity sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA== + import-fresh@^3.0.0, import-fresh@^3.2.1: version "3.3.0" resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz" @@ -2803,6 +2906,13 @@ is-bigint@^1.0.1: dependencies: has-bigints "^1.0.1" +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + is-boolean-object@^1.1.0: version "1.1.2" resolved "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz" @@ -2840,7 +2950,7 @@ is-fullwidth-code-point@^3.0.0: resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== -is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: version "4.0.3" resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== @@ -2900,6 +3010,11 @@ is-weakref@^1.0.2: dependencies: call-bind "^1.0.2" +is-what@^3.14.1: + version "3.14.1" + resolved "https://registry.yarnpkg.com/is-what/-/is-what-3.14.1.tgz#e1222f46ddda85dead0fd1c9df131760e77755c1" + integrity sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA== + isexe@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" @@ -2951,6 +3066,11 @@ json5@^1.0.1: dependencies: minimist "^1.2.0" +json5@^2.2.2: + version "2.2.3" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" + integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== + "jsx-ast-utils@^2.4.1 || ^3.0.0": version "3.3.1" resolved "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.1.tgz" @@ -2984,6 +3104,23 @@ language-tags@^1.0.5: dependencies: language-subtag-registry "~0.3.2" +less@^4.1.3: + version "4.2.0" + resolved "https://registry.yarnpkg.com/less/-/less-4.2.0.tgz#cbefbfaa14a4cd388e2099b2b51f956e1465c450" + integrity sha512-P3b3HJDBtSzsXUl0im2L7gTO5Ubg8mEN6G8qoTS77iXxXX4Hvu4Qj540PZDvQ8V6DmX6iXo98k7Md0Cm1PrLaA== + dependencies: + copy-anything "^2.0.1" + parse-node-version "^1.0.1" + tslib "^2.3.0" + optionalDependencies: + errno "^0.1.1" + graceful-fs "^4.1.2" + image-size "~0.5.0" + make-dir "^2.1.0" + mime "^1.4.1" + needle "^3.1.0" + source-map "~0.6.0" + levn@^0.4.1: version "0.4.1" resolved "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz" @@ -2992,6 +3129,11 @@ levn@^0.4.1: prelude-ls "^1.2.1" type-check "~0.4.0" +lilconfig@^2.0.5: + version "2.1.0" + resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.1.0.tgz#78e23ac89ebb7e1bfbf25b18043de756548e7f52" + integrity sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ== + locate-path@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz" @@ -3041,6 +3183,14 @@ luxon@^3.0.3: resolved "https://registry.npmjs.org/luxon/-/luxon-3.0.3.tgz" integrity sha512-+EfHWnF+UT7GgTnq5zXg3ldnTKL2zdv7QJgsU5bjjpbH17E3qi/puMhQyJVYuCq+FRkogvB5WB6iVvUr+E4a7w== +make-dir@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" + integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== + dependencies: + pify "^4.0.1" + semver "^5.6.0" + memoize-one@^4.0.0: version "4.1.0" resolved "https://registry.npmjs.org/memoize-one/-/memoize-one-4.1.0.tgz" @@ -3064,6 +3214,11 @@ micromatch@^4.0.4: braces "^3.0.2" picomatch "^2.3.1" +mime@^1.4.1: + version "1.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== + minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" @@ -3158,6 +3313,11 @@ nanoid@^3.3.4: resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz" integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw== +nanoid@^3.3.6: + version "3.3.6" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.6.tgz#443380c856d6e9f9824267d960b4236ad583ea4c" + integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA== + nanoid@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/nanoid/-/nanoid-4.0.0.tgz" @@ -3168,6 +3328,15 @@ natural-compare@^1.4.0: resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== +needle@^3.1.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/needle/-/needle-3.2.0.tgz#07d240ebcabfd65c76c03afae7f6defe6469df44" + integrity sha512-oUvzXnyLiVyVGoianLijF9O/RecZUf7TkBfimjGrLM4eQhXyeJwM6GeAWccwfQ9aa4gMCZKqhAOuLaMIcQxajQ== + dependencies: + debug "^3.2.6" + iconv-lite "^0.6.3" + sax "^1.2.4" + next-auth@^4.10.3: version "4.10.3" resolved "https://registry.npmjs.org/next-auth/-/next-auth-4.10.3.tgz" @@ -3219,6 +3388,11 @@ node-ical@^0.15.1: rrule "2.6.4" uuid "^8.3.1" +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + oauth@^0.9.15: version "0.9.15" resolved "https://registry.npmjs.org/oauth/-/oauth-0.9.15.tgz" @@ -3378,6 +3552,11 @@ parent-module@^1.0.0: dependencies: callsites "^3.0.0" +parse-node-version@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parse-node-version/-/parse-node-version-1.0.1.tgz#e2b5dbede00e7fa9bc363607f53327e8b073189b" + integrity sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA== + path-exists@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz" @@ -3413,11 +3592,58 @@ picocolors@^1.0.0: resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz" integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== -picomatch@^2.3.1: +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: version "2.3.1" resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== +pify@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" + integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== + +postcss-load-config@^3.1.4: + version "3.1.4" + resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-3.1.4.tgz#1ab2571faf84bb078877e1d07905eabe9ebda855" + integrity sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg== + dependencies: + lilconfig "^2.0.5" + yaml "^1.10.2" + +postcss-modules-extract-imports@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz#cda1f047c0ae80c97dbe28c3e76a43b88025741d" + integrity sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw== + +postcss-modules-local-by-default@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.3.tgz#b08eb4f083050708998ba2c6061b50c2870ca524" + integrity sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA== + dependencies: + icss-utils "^5.0.0" + postcss-selector-parser "^6.0.2" + postcss-value-parser "^4.1.0" + +postcss-modules-scope@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz#9ef3151456d3bbfa120ca44898dfca6f2fa01f06" + integrity sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg== + dependencies: + postcss-selector-parser "^6.0.4" + +postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4: + version "6.0.13" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz#d05d8d76b1e8e173257ef9d60b706a8e5e99bf1b" + integrity sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ== + dependencies: + cssesc "^3.0.0" + util-deprecate "^1.0.2" + +postcss-value-parser@^4.1.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" + integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== + postcss@8.4.14: version "8.4.14" resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz" @@ -3427,6 +3653,15 @@ postcss@8.4.14: picocolors "^1.0.0" source-map-js "^1.0.2" +postcss@^8.0.0, postcss@^8.4.21: + version "8.4.31" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.31.tgz#92b451050a9f914da6755af352bdc0192508656d" + integrity sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ== + dependencies: + nanoid "^3.3.6" + picocolors "^1.0.0" + source-map-js "^1.0.2" + preact-render-to-string@^5.1.19: version "5.2.0" resolved "https://registry.npmjs.org/preact-render-to-string/-/preact-render-to-string-5.2.0.tgz" @@ -3470,6 +3705,11 @@ prop-types@^15.5.8, prop-types@^15.8.1: object-assign "^4.1.1" react-is "^16.13.1" +prr@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" + integrity sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw== + punycode@^2.1.0, punycode@^2.1.1: version "2.1.1" resolved "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz" @@ -3879,6 +4119,13 @@ react@18.0.0: dependencies: loose-envify "^1.1.0" +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + dependencies: + picomatch "^2.2.1" + reduce-flatten@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-2.0.0.tgz" @@ -3908,6 +4155,11 @@ regexpp@^3.2.0: resolved "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz" integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== +reserved-words@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/reserved-words/-/reserved-words-0.1.2.tgz#00a0940f98cd501aeaaac316411d9adc52b31ab1" + integrity sha512-0S5SrIUJ9LfpbVl4Yzij6VipUdafHrOTzvmfazSw/jeZrZtQK303OPZW+obtkaw7jQlTQppy0UvZWm9872PbRw== + resize-observer-polyfill@^1.5.1: version "1.5.1" resolved "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz" @@ -3969,7 +4221,7 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" -"safer-buffer@>= 2.1.2 < 3": +"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": version "2.1.2" resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== @@ -3981,6 +4233,25 @@ saslprep@^1.0.3: dependencies: sparse-bitfield "^3.0.3" +sass@^1.58.3: + version "1.68.0" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.68.0.tgz#0034b0cc9a50248b7d1702ac166fd25990023669" + integrity sha512-Lmj9lM/fef0nQswm1J2HJcEsBUba4wgNx2fea6yJHODREoMFnwRpZydBnX/RjyXw2REIwdkbqE4hrTo4qfDBUA== + dependencies: + chokidar ">=3.0.0 <4.0.0" + immutable "^4.0.0" + source-map-js ">=0.6.2 <2.0.0" + +sax@^1.2.4: + version "1.3.0" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.3.0.tgz#a5dbe77db3be05c9d1ee7785dbd3ea9de51593d0" + integrity sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA== + +sax@~1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" + integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== + scheduler@^0.21.0: version "0.21.0" resolved "https://registry.npmjs.org/scheduler/-/scheduler-0.21.0.tgz" @@ -3995,6 +4266,11 @@ scroll-into-view-if-needed@^3.0.3: dependencies: compute-scroll-into-view "^3.0.2" +semver@^5.6.0: + version "5.7.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" + integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== + semver@^6.3.0: version "6.3.0" resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" @@ -4056,11 +4332,21 @@ socks@^2.7.0: ip "^2.0.0" smart-buffer "^4.2.0" -source-map-js@^1.0.2: +"source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz" integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== +source-map@^0.7.3: + version "0.7.4" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.4.tgz#a9bbe705c9d8846f4e08ff6765acf0f1b0898656" + integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA== + +source-map@~0.6.0: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + sparse-bitfield@^3.0.3: version "3.0.3" resolved "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz" @@ -4146,6 +4432,17 @@ stylis@^4.0.13: resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.3.0.tgz#abe305a669fc3d8777e10eefcfc73ad861c5588c" integrity sha512-E87pIogpwUsUwXw7dNyU4QDjdgVMy52m+XEOPEKUn161cCzWjjhPSQhByfd1CcNvrOLnXQ6OnnZDwnJrz/Z4YQ== +stylus@^0.59.0: + version "0.59.0" + resolved "https://registry.yarnpkg.com/stylus/-/stylus-0.59.0.tgz#a344d5932787142a141946536d6e24e6a6be7aa6" + integrity sha512-lQ9w/XIOH5ZHVNuNbWW8D822r+/wBSO/d6XvtyHLF7LW4KaCIDeVbvn5DF8fGCJAUCwVhVi/h6J0NUcnylUEjg== + dependencies: + "@adobe/css-tools" "^4.0.1" + debug "^4.3.2" + glob "^7.1.6" + sax "~1.2.4" + source-map "^0.7.3" + supports-color@^5.3.0: version "5.5.0" resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" @@ -4236,11 +4533,25 @@ tsconfig-paths@^3.14.1: minimist "^1.2.6" strip-bom "^3.0.0" +tsconfig-paths@^4.1.2: + version "4.2.0" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz#ef78e19039133446d244beac0fd6a1632e2d107c" + integrity sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg== + dependencies: + json5 "^2.2.2" + minimist "^1.2.6" + strip-bom "^3.0.0" + tslib@^1.10.0, tslib@^1.11.1, tslib@^1.8.1: version "1.14.1" resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== +tslib@^2.3.0: + version "2.6.2" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" + integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== + tslib@^2.3.1, tslib@^2.4.0: version "2.4.0" resolved "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz" @@ -4270,6 +4581,28 @@ type-fest@^0.21.3: resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz" integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== +typescript-plugin-css-modules@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/typescript-plugin-css-modules/-/typescript-plugin-css-modules-5.0.1.tgz#cd53a5891d4c8338b1d92936ba8383737a7fcf0e" + integrity sha512-hKXObfwfjx2/myRq4JeQ8D3xIWYTFqusi0hS/Aka7RFX1xQEoEkdOGDWyXNb8LmObawsUzbI30gQnZvqYXCrkA== + dependencies: + "@types/postcss-modules-local-by-default" "^4.0.0" + "@types/postcss-modules-scope" "^3.0.1" + dotenv "^16.0.3" + icss-utils "^5.1.0" + less "^4.1.3" + lodash.camelcase "^4.3.0" + postcss "^8.4.21" + postcss-load-config "^3.1.4" + postcss-modules-extract-imports "^3.0.0" + postcss-modules-local-by-default "^4.0.0" + postcss-modules-scope "^3.0.0" + reserved-words "^0.1.2" + sass "^1.58.3" + source-map-js "^1.0.2" + stylus "^0.59.0" + tsconfig-paths "^4.1.2" + typescript@4.8.3: version "4.8.3" resolved "https://registry.npmjs.org/typescript/-/typescript-4.8.3.tgz" @@ -4307,6 +4640,11 @@ use-sync-external-store@1.2.0: resolved "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz" integrity sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA== +util-deprecate@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + uuid@^8.3.1, uuid@^8.3.2: version "8.3.2" resolved "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz" @@ -4375,6 +4713,11 @@ yallist@^4.0.0: resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== +yaml@^1.10.2: + version "1.10.2" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" + integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== + yocto-queue@^0.1.0: version "0.1.0" resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz"