diff --git a/assets/clock.svg b/assets/clock.svg index f5359290..9c2a9a41 100644 --- a/assets/clock.svg +++ b/assets/clock.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/dashboard.svg b/assets/dashboard.svg index b4cf27bd..11859d28 100644 --- a/assets/dashboard.svg +++ b/assets/dashboard.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/edit.svg b/assets/edit.svg new file mode 100644 index 00000000..b93e50ae --- /dev/null +++ b/assets/edit.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/sun.svg b/assets/sun.svg index 3e487291..c9654776 100644 --- a/assets/sun.svg +++ b/assets/sun.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/user.svg b/assets/user.svg index a46974d1..a75cbb8d 100644 --- a/assets/user.svg +++ b/assets/user.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/components/common/EmptyPlaceholder.js b/components/common/EmptyPlaceholder.js index f7aa6dd7..1b6617e3 100644 --- a/components/common/EmptyPlaceholder.js +++ b/components/common/EmptyPlaceholder.js @@ -1,25 +1,16 @@ -import PropTypes from 'prop-types'; -import { Icon, Flexbox } from 'react-basics'; +import { Icon, Text, Flexbox } from 'react-basics'; import Logo from 'assets/logo.svg'; -import styles from './EmptyPlaceholder.module.css'; function EmptyPlaceholder({ msg, children }) { return ( -
- + + -

{msg}

- - {children} - -
+ {msg} +
{children}
+ ); } -EmptyPlaceholder.propTypes = { - msg: PropTypes.node, - children: PropTypes.node, -}; - export default EmptyPlaceholder; diff --git a/components/common/EmptyPlaceholder.module.css b/components/common/EmptyPlaceholder.module.css deleted file mode 100644 index a9231836..00000000 --- a/components/common/EmptyPlaceholder.module.css +++ /dev/null @@ -1,15 +0,0 @@ -.placeholder { - display: flex; - flex-direction: column; - justify-content: center; - align-items: center; - min-height: 600px; -} - -.icon { - margin-bottom: 30px; -} - -.msg { - margin-bottom: 15px; -} diff --git a/components/icons.js b/components/icons.js index 37a5d2d3..af254424 100644 --- a/components/icons.js +++ b/components/icons.js @@ -1,8 +1,10 @@ import Calendar from 'assets/calendar.svg'; import Clock from 'assets/clock.svg'; import Dashboard from 'assets/dashboard.svg'; +import Edit from 'assets/edit.svg'; import Gear from 'assets/gear.svg'; import Globe from 'assets/globe.svg'; +import Lock from 'assets/lock.svg'; import Logo from 'assets/logo.svg'; import Moon from 'assets/moon.svg'; import Profile from 'assets/profile.svg'; @@ -10,4 +12,18 @@ import Sun from 'assets/sun.svg'; import User from 'assets/user.svg'; import Users from 'assets/users.svg'; -export { Calendar, Clock, Dashboard, Gear, Globe, Logo, Moon, Profile, Sun, User, Users }; +export { + Calendar, + Clock, + Dashboard, + Edit, + Gear, + Globe, + Lock, + Logo, + Moon, + Profile, + Sun, + User, + Users, +}; diff --git a/components/layout/NavBar.js b/components/layout/NavBar.js index 83f25501..3df4a68f 100644 --- a/components/layout/NavBar.js +++ b/components/layout/NavBar.js @@ -4,19 +4,22 @@ import classNames from 'classnames'; import { Dashboard, Logo, Profile, User, Users, Clock, Globe } from 'components/icons'; import NavGroup from './NavGroup'; import styles from './NavBar.module.css'; +import ThemeButton from '../buttons/ThemeButton'; +import LanguageButton from '../buttons/LanguageButton'; const { ChevronDown, Search } = Icons; const analytics = [ - { key: 'dashboard', label: 'Dashboard', url: '/dashboard', icon: }, - { key: 'realtime', label: 'Realtime', url: '/realtime', icon: }, - { key: 'queries', label: 'Queries', url: '/queries', icon: }, + { label: 'Dashboard', url: '/dashboard', icon: }, + { label: 'Realtime', url: '/realtime', icon: }, + { label: 'Queries', url: '/queries', icon: }, ]; const settings = [ - { key: 'websites', label: 'Websites', url: '/settings/websites', icon: }, - { key: 'users', label: 'Users', url: '/settings/users', icon: }, - { key: 'teams', label: 'Teams', url: '/settings/teams', icon: }, + { label: 'Websites', url: '/settings/websites', icon: }, + { label: 'Users', url: '/settings/users', icon: }, + { label: 'Teams', url: '/settings/teams', icon: }, + { label: 'Profile', url: '/settings/profile', icon: }, ]; export default function NavBar() { @@ -38,10 +41,10 @@ export default function NavBar() {
- - - - Profile +
+ + +
); diff --git a/components/layout/NavBar.module.css b/components/layout/NavBar.module.css index 04be5853..19a332df 100644 --- a/components/layout/NavBar.module.css +++ b/components/layout/NavBar.module.css @@ -45,3 +45,9 @@ justify-content: flex-end; padding: 20px; } + +.buttons { + display: flex; + align-items: center; + justify-content: center; +} diff --git a/components/layout/NavGroup.js b/components/layout/NavGroup.js index 334bea09..44cd4a96 100644 --- a/components/layout/NavGroup.js +++ b/components/layout/NavGroup.js @@ -26,18 +26,23 @@ export default function NavGroup({ [styles.minimized]: minimized, })} > -
- {title} - - - -
+ {title && ( +
+ {title} + + + +
+ )}
- {items.map(({ key, label, url, icon }) => { + {items.map(({ label, url, icon, divider }) => { return ( - + {icon} {label} diff --git a/components/layout/NavGroup.module.css b/components/layout/NavGroup.module.css index 34cfb42f..cb358851 100644 --- a/components/layout/NavGroup.module.css +++ b/components/layout/NavGroup.module.css @@ -25,6 +25,7 @@ } .items { + position: relative; display: flex; flex-direction: column; gap: 20px; @@ -33,6 +34,7 @@ } .item { + position: relative; display: flex; flex-direction: row; align-items: center; @@ -43,6 +45,10 @@ width: 200px; } +a.item { + color: var(--base700); +} + .item.selected { color: var(--base900); border-right-color: var(--primary400); @@ -58,10 +64,6 @@ pointer-events: none; } -a.item { - color: var(--base600); -} - .minimized .text, .minimized .header { display: none; @@ -74,3 +76,18 @@ a.item { align-items: center; justify-content: center; } + +.divider:before { + content: ''; + position: absolute; + top: 0; + left: 0; + right: 0; + margin: auto; + border-top: 1px solid var(--base300); + width: 160px; +} + +.minimized .divider:before { + width: 60px; +} diff --git a/components/pages/dashboard/Dashboard.js b/components/pages/dashboard/Dashboard.js index 413a0710..523f04c2 100644 --- a/components/pages/dashboard/Dashboard.js +++ b/components/pages/dashboard/Dashboard.js @@ -39,8 +39,7 @@ export default function Dashboard({ userId }) { return ( - -
{formatMessage(messages.dashboard)}
+ {!editing && } {editing && } diff --git a/components/pages/settings/profile/ChangePasswordButton.js b/components/pages/settings/profile/ChangePasswordButton.js new file mode 100644 index 00000000..d80e8d63 --- /dev/null +++ b/components/pages/settings/profile/ChangePasswordButton.js @@ -0,0 +1,46 @@ +import { useState } from 'react'; +import { defineMessages, useIntl } from 'react-intl'; +import { Button, Icon, Modal, useToast } from 'react-basics'; +import PasswordEditForm from 'components/pages/settings/profile/PasswordEditForm'; +import { Lock } from 'components/icons'; + +const messages = defineMessages({ + changePassword: { id: 'label.change-password', defaultMessage: 'Change password' }, + saved: { id: 'message.saved-successfully', defaultMessage: 'Saved successfully.' }, +}); + +export default function ChangePasswordButton() { + const { formatMessage } = useIntl(); + const [edit, setEdit] = useState(false); + const { toast, showToast } = useToast(); + + const handleSave = () => { + showToast({ message: formatMessage(messages.saved), variant: 'success' }); + setEdit(false); + }; + + const handleAdd = () => { + setEdit(true); + }; + + const handleClose = () => { + setEdit(false); + }; + + return ( + <> + {toast} + + {edit && ( + + {() => } + + )} + + ); +} diff --git a/components/pages/settings/profile/PasswordEditForm.js b/components/pages/settings/profile/PasswordEditForm.js new file mode 100644 index 00000000..6b446d75 --- /dev/null +++ b/components/pages/settings/profile/PasswordEditForm.js @@ -0,0 +1,76 @@ +import { useRef } from 'react'; +import { Form, FormRow, FormInput, FormButtons, PasswordField, Button } from 'react-basics'; +import useApi from 'hooks/useApi'; +import useUser from 'hooks/useUser'; + +export default function PasswordEditForm({ userId, onSave, onClose }) { + const user = useUser(); + const isCurrentUser = !userId || user?.id === userId; + const url = isCurrentUser ? `/users/${user?.id}/password` : `/users/${user?.id}`; + const { post, useMutation } = useApi(); + const { mutate, error, isLoading } = useMutation(data => post(url, data)); + const ref = useRef(null); + + const handleSubmit = async data => { + const payload = isCurrentUser + ? data + : { + password: data.newPassword, + }; + + mutate(payload, { + onSuccess: async () => { + onSave(); + ref.current.reset(); + }, + }); + }; + + const samePassword = value => { + if (value !== ref?.current?.getValues('newPassword')) { + return "Passwords don't match"; + } + return true; + }; + + return ( +
+ {isCurrentUser && ( + + + + + + )} + + + + + + + + + + + + + + +
+ ); +} diff --git a/components/pages/settings/profile/ProfileSettings.js b/components/pages/settings/profile/ProfileSettings.js index aee41eaf..8a0323f8 100644 --- a/components/pages/settings/profile/ProfileSettings.js +++ b/components/pages/settings/profile/ProfileSettings.js @@ -1,48 +1,26 @@ +import { Breadcrumbs, Item } from 'react-basics'; +import { defineMessages, useIntl } from 'react-intl'; import Page from 'components/layout/Page'; import PageHeader from 'components/layout/PageHeader'; -import ProfileDetails from 'components/pages/settings/profile/ProfileDetails'; -import { useState } from 'react'; -import { Breadcrumbs, Icon, Item, useToast, Modal, Button } from 'react-basics'; -import UserPasswordForm from 'components/pages/settings/users/UserPasswordForm'; -import Lock from 'assets/lock.svg'; +import ProfileDetails from './ProfileDetails'; +import ChangePasswordButton from './ChangePasswordButton'; + +const messages = defineMessages({ + profile: { id: 'label.profile', defaultMessage: 'Profile' }, +}); export default function ProfileSettings() { - const [edit, setEdit] = useState(false); - const { toast, showToast } = useToast(); - - const handleSave = () => { - showToast({ message: 'Saved successfully.', variant: 'success' }); - setEdit(false); - }; - - const handleAdd = () => { - setEdit(true); - }; - - const handleClose = () => { - setEdit(false); - }; + const { formatMessage } = useIntl(); return ( - {toast} - Profile + {formatMessage(messages.profile)} - + - {edit && ( - - {close => } - - )} ); } diff --git a/components/pages/settings/users/UserAddForm.js b/components/pages/settings/users/UserAddForm.js new file mode 100644 index 00000000..64e43b60 --- /dev/null +++ b/components/pages/settings/users/UserAddForm.js @@ -0,0 +1,65 @@ +import { + Dropdown, + Item, + Form, + FormRow, + FormButtons, + FormInput, + TextField, + PasswordField, + SubmitButton, +} from 'react-basics'; +import { useIntl, defineMessages } from 'react-intl'; +import useApi from 'hooks/useApi'; +import { ROLES } from 'lib/constants'; + +const messages = defineMessages({ + username: { id: 'label.username', defaultMessage: 'Username' }, + password: { id: 'label.password', defaultMessage: 'Password' }, + role: { id: 'label.role', defaultMessage: 'Role' }, + user: { id: 'label.user', defaultMessage: 'User' }, + admin: { id: 'label.admin', defaultMessage: 'Admin' }, + save: { id: 'label.save', defaultMessage: 'Save' }, + cancel: { id: 'label.cancel', defaultMessage: 'Cancel' }, + required: { id: 'label.required', defaultMessage: 'Required' }, +}); + +export default function UserAddForm({ onSave }) { + const { post, useMutation } = useApi(); + const { mutate, error } = useMutation(data => post(`/users`, data)); + const { formatMessage } = useIntl(); + + const handleSubmit = async data => { + mutate(data, { + onSuccess: async () => { + onSave(data); + }, + }); + }; + + return ( +
+ + + + + + + + + + + + + + {formatMessage(messages.user)} + {formatMessage(messages.admin)} + + + + + {formatMessage(messages.save)} + +
+ ); +} diff --git a/components/pages/settings/users/UserEditForm.js b/components/pages/settings/users/UserEditForm.js index 3e7f8d0d..eb1d921f 100644 --- a/components/pages/settings/users/UserEditForm.js +++ b/components/pages/settings/users/UserEditForm.js @@ -9,7 +9,6 @@ import { SubmitButton, } from 'react-basics'; import { useRef } from 'react'; -import { useMutation } from '@tanstack/react-query'; import useApi from 'hooks/useApi'; import { ROLES } from 'lib/constants'; @@ -26,7 +25,7 @@ const items = [ export default function UserEditForm({ data, onSave }) { const { id } = data; - const { post } = useApi(); + const { post, useMutation } = useApi(); const { mutate, error } = useMutation(({ username }) => post(`/user/${id}`, { username })); const ref = useRef(null); diff --git a/components/pages/settings/users/UserPasswordForm.js b/components/pages/settings/users/UserPasswordForm.js index 6cf2c4d0..218d8469 100644 --- a/components/pages/settings/users/UserPasswordForm.js +++ b/components/pages/settings/users/UserPasswordForm.js @@ -5,7 +5,6 @@ import useUser from 'hooks/useUser'; export default function UserPasswordForm({ onSave, onClose, userId }) { const user = useUser(); - const isCurrentUser = !userId || user?.id === userId; const url = isCurrentUser ? `/users/${user?.id}/password` : `/users/${user?.id}`; const { post, useMutation } = useApi(); diff --git a/components/pages/settings/users/UserSettings.js b/components/pages/settings/users/UserSettings.js index 596fd725..993750c6 100644 --- a/components/pages/settings/users/UserSettings.js +++ b/components/pages/settings/users/UserSettings.js @@ -1,21 +1,30 @@ -import { useQuery } from '@tanstack/react-query'; +import { useEffect, useState } from 'react'; +import { defineMessages, useIntl } from 'react-intl'; +import { Breadcrumbs, Item, Tabs, useToast } from 'react-basics'; +import Link from 'next/link'; +import { useRouter } from 'next/router'; import UserDelete from 'components/pages/settings/users/UserDelete'; -import UserEditForm from 'components/pages/settings/users/UserEditForm'; +import UserEditForm from 'components/pages/settings/users//UserEditForm'; import UserPasswordForm from 'components/pages/settings/users/UserPasswordForm'; import Page from 'components/layout/Page'; import PageHeader from 'components/layout/PageHeader'; import useApi from 'hooks/useApi'; -import Link from 'next/link'; -import { useRouter } from 'next/router'; -import { useEffect, useState } from 'react'; -import { Breadcrumbs, Item, Icon, Tabs, useToast, Modal, Button } from 'react-basics'; -import Pen from 'assets/pen.svg'; + +const messages = defineMessages({ + users: { id: 'label.users', defaultMessage: 'Users' }, + details: { id: 'label.details', defaultMessage: 'Details' }, + changePassword: { id: 'label.change-password', defaultMessage: 'Change password' }, + actions: { id: 'label.actions', defaultMessage: 'Actions' }, + saved: { id: 'message.saved-successfully', defaultMessage: 'Saved successfully.' }, + delete: { id: 'message.delete-successfully', defaultMessage: 'Delete successfully.' }, +}); export default function UserSettings({ userId }) { + const { formatMessage } = useIntl(); const [edit, setEdit] = useState(false); const [values, setValues] = useState(null); - const [tab, setTab] = useState('general'); - const { get } = useApi(); + const [tab, setTab] = useState('details'); + const { get, useQuery } = useApi(); const { toast, showToast } = useToast(); const router = useRouter(); const { data, isLoading } = useQuery( @@ -39,14 +48,6 @@ export default function UserSettings({ userId }) { } }; - const handleAdd = () => { - setEdit(true); - }; - - const handleClose = () => { - setEdit(false); - }; - const handleDelete = async () => { showToast({ message: 'Deleted successfully.', variant: 'danger' }); await router.push('/users'); @@ -64,30 +65,19 @@ export default function UserSettings({ userId }) { - Users + {formatMessage(messages.users)} {values?.username} - - General - Danger Zone + {formatMessage(messages.details)} + {formatMessage(messages.changePassword)} + {formatMessage(messages.actions)} - {tab === 'general' && } + {tab === 'details' && } + {tab === 'password' && } {tab === 'delete' && } - {edit && ( - - {close => ( - - )} - - )}
); } diff --git a/components/pages/settings/users/UsersList.js b/components/pages/settings/users/UsersList.js index 5f057747..b8d579b9 100644 --- a/components/pages/settings/users/UsersList.js +++ b/components/pages/settings/users/UsersList.js @@ -1,44 +1,69 @@ +import { useState } from 'react'; +import { Button, Text, Icon, useToast, Icons, Modal } from 'react-basics'; +import { useIntl, defineMessages } from 'react-intl'; import Page from 'components/layout/Page'; import PageHeader from 'components/layout/PageHeader'; +import EmptyPlaceholder from 'components/common/EmptyPlaceholder'; import UsersTable from 'components/pages/settings/users/UsersTable'; -import { useState } from 'react'; -import { Button, Icon, useToast } from 'react-basics'; -import { useMutation } from '@tanstack/react-query'; +import UserEditForm from 'components/pages/settings/users/UserEditForm'; import useApi from 'hooks/useApi'; +import useUser from 'hooks/useUser'; + +const { Plus } = Icons; + +const messages = defineMessages({ + saved: { id: 'messages.api-key-saved', defaultMessage: 'API key saved.' }, + noUsers: { + id: 'messages.no-useres', + defaultMessage: "You don't have any users.", + }, + users: { id: 'label.users', defaultMessage: 'Users' }, + createUser: { id: 'label.create-user', defaultMessage: 'Create user' }, +}); export default function UsersList() { - const [loading, setLoading] = useState(false); - const [error, setError] = useState(); + const [edit, setEdit] = useState(false); + const { formatMessage } = useIntl(); const { toast, showToast } = useToast(); - const { post } = useApi(); - const { mutate, isLoading } = useMutation(data => post('/api-key', data)); + const { user } = useUser(); + const { get, useQuery } = useApi(); + const { data, isLoading, error, refetch } = useQuery(['user'], () => get(`/users`), { + enabled: !!user, + }); + const hasData = data && data.length !== 0; - const handleSave = () => { - mutate( - {}, - { - onSuccess: async () => { - showToast({ message: 'API key saved.', variant: 'success' }); - }, - }, - ); + const handleSave = async () => { + await refetch(); + setEdit(false); + showToast({ message: formatMessage(messages.saved), variant: 'success' }); }; + const handleAdd = () => setEdit(true); + + const handleClose = () => setEdit(false); + + const addButton = ( + + ); + return ( - + {toast} - - - - { - setLoading(isLoading); - setError(error); - }} - onAddKeyClick={handleSave} - /> + {addButton} + {hasData && } + {!hasData && ( + {addButton} + )} + {edit && ( + + {close => } + + )} ); } diff --git a/components/pages/settings/users/UsersTable.js b/components/pages/settings/users/UsersTable.js index 7cd0a596..16cf0870 100644 --- a/components/pages/settings/users/UsersTable.js +++ b/components/pages/settings/users/UsersTable.js @@ -1,11 +1,6 @@ -import { useQuery } from '@tanstack/react-query'; -import EmptyPlaceholder from 'components/common/EmptyPlaceholder'; -import { formatDistance } from 'date-fns'; -import useApi from 'hooks/useApi'; -import Link from 'next/link'; -import { useEffect, useState } from 'react'; import { Button, + Text, Icon, Table, TableBody, @@ -14,84 +9,66 @@ import { TableHeader, TableRow, } from 'react-basics'; +import { formatDistance } from 'date-fns'; +import Link from 'next/link'; +import { Edit } from 'components/icons'; import styles from './UsersTable.module.css'; -const defaultColumns = [ +const columns = [ { name: 'username', label: 'Username', style: { flex: 2 } }, { name: 'role', label: 'Role', style: { flex: 2 } }, { name: 'created', label: 'Created' }, { name: 'action', label: ' ' }, ]; -export default function UsersTable({ columns = defaultColumns, onLoading, onAddKeyClick }) { - const [values, setValues] = useState(null); - const { get } = useApi(); - const { data, isLoading, error } = useQuery(['user'], () => get(`/users`)); - const hasData = data && data.length !== 0; - - useEffect(() => { - if (data) { - setValues(data); - onLoading({ data, isLoading, error }); - } - }, [onLoading, data, isLoading, error]); - +export default function UsersTable({ data = [] }) { return ( - <> - {hasData && ( - - - {(column, index) => { - return ( - - {column.label} - - ); - }} - - - {(row, keys, rowIndex) => { - row.created = formatDistance(new Date(row.createdAt), new Date(), { - addSuffix: true, - }); +
+ + {(column, index) => { + return ( + + {column.label} + + ); + }} + + + {(row, keys, rowIndex) => { + row.created = formatDistance(new Date(row.createdAt), new Date(), { + addSuffix: true, + }); - row.action = ( -
- - - -
- ); + row.action = ( +
+ + + +
+ ); - return ( - - {(data, key, colIndex) => { - return ( - - {data[key]} - - ); - }} - - ); - }} -
-
- )} - {!hasData && ( - - - - )} - + return ( + + {(data, key, colIndex) => { + return ( + + {data[key]} + + ); + }} + + ); + }} + + ); } diff --git a/components/pages/settings/websites/ShareUrl.js b/components/pages/settings/websites/ShareUrl.js index a8327ebf..88997bae 100644 --- a/components/pages/settings/websites/ShareUrl.js +++ b/components/pages/settings/websites/ShareUrl.js @@ -23,7 +23,7 @@ export default function ShareUrl({ websiteId, data, onSave }) { ); const ref = useRef(null); const url = useMemo( - () => `${process.env.analyticsUrl}/share/${id}/${encodeURIComponent(name)}`, + () => `${process.env.analyticsUrl || location.origin}/share/${id}/${encodeURIComponent(name)}`, [id, name], ); diff --git a/components/pages/settings/websites/WebsiteEditForm.js b/components/pages/settings/websites/WebsiteEditForm.js index 87e43e30..802929b6 100644 --- a/components/pages/settings/websites/WebsiteEditForm.js +++ b/components/pages/settings/websites/WebsiteEditForm.js @@ -18,7 +18,7 @@ export default function WebsiteEditForm({ websiteId, data, onSave }) { }; return ( -
+ diff --git a/components/pages/settings/websites/WebsiteDetails.js b/components/pages/settings/websites/WebsiteSettings.js similarity index 59% rename from components/pages/settings/websites/WebsiteDetails.js rename to components/pages/settings/websites/WebsiteSettings.js index dc44096d..d240a859 100644 --- a/components/pages/settings/websites/WebsiteDetails.js +++ b/components/pages/settings/websites/WebsiteSettings.js @@ -1,16 +1,29 @@ import { useEffect, useState } from 'react'; -import { Breadcrumbs, Item, Tabs, useToast, Button, Icon } from 'react-basics'; -import useApi from 'hooks/useApi'; +import { Breadcrumbs, Item, Tabs, useToast, Button, Text, Icon, Icons } from 'react-basics'; +import { defineMessages, useIntl } from 'react-intl'; import Link from 'next/link'; import Page from 'components/layout/Page'; +import PageHeader from 'components/layout/PageHeader'; import WebsiteEditForm from 'components/pages/settings/websites/WebsiteEditForm'; import WebsiteReset from 'components/pages/settings/websites/WebsiteReset'; -import PageHeader from 'components/layout/PageHeader'; import TrackingCode from 'components/pages/settings/websites/TrackingCode'; import ShareUrl from 'components/pages/settings/websites/ShareUrl'; -import ExternalLink from 'assets/external-link.svg'; +import useApi from 'hooks/useApi'; -export default function WebsiteDetails({ websiteId }) { +const { External } = Icons; + +const messages = defineMessages({ + websites: { id: 'label.websites', defaultMessage: 'Websites' }, + details: { id: 'label.details', defaultMessage: 'Details' }, + trackingCode: { id: 'label.tracking-code', defaultMessage: 'Tracking code' }, + shareUrl: { id: 'label.share-url', defaultMessage: 'Share URL' }, + actions: { id: 'label.actions', defaultMessage: 'Actions' }, + view: { id: 'label.view', defaultMessage: 'View' }, + saved: { id: 'message.saved-successfully', defaultMessage: 'Save successfully.' }, +}); + +export default function WebsiteSettings({ websiteId }) { + const { formatMessage } = useIntl(); const [values, setValues] = useState(null); const [tab, setTab] = useState('details'); const { get, useQuery } = useApi(); @@ -26,7 +39,7 @@ export default function WebsiteDetails({ websiteId }) { ); const handleSave = data => { - showToast({ message: 'Saved successfully.', variant: 'success' }); + showToast({ message: formatMessage(messages.saved), variant: 'success' }); setValues(state => ({ ...state, ...data })); }; @@ -42,7 +55,7 @@ export default function WebsiteDetails({ websiteId }) { - Websites + {formatMessage(messages.websites)} {values?.name} @@ -50,18 +63,18 @@ export default function WebsiteDetails({ websiteId }) { - Details - Tracking code - Share URL - Actions + {formatMessage(messages.details)} + {formatMessage(messages.trackingCode)} + {formatMessage(messages.shareUrl)} + {formatMessage(messages.actions)} {tab === 'details' && ( diff --git a/components/pages/settings/websites/WebsitesList.js b/components/pages/settings/websites/WebsitesList.js index 10a4616d..1e5c1419 100644 --- a/components/pages/settings/websites/WebsitesList.js +++ b/components/pages/settings/websites/WebsitesList.js @@ -1,72 +1,70 @@ import { useState } from 'react'; import { Button, Icon, Text, Modal, useToast, Icons } from 'react-basics'; -import useApi from 'hooks/useApi'; +import { useIntl, defineMessages } from 'react-intl'; +import Page from 'components/layout/Page'; +import PageHeader from 'components/layout/PageHeader'; import EmptyPlaceholder from 'components/common/EmptyPlaceholder'; import WebsiteAddForm from 'components/pages/settings/websites/WebsiteAddForm'; -import PageHeader from 'components/layout/PageHeader'; import WebsitesTable from 'components/pages/settings/websites/WebsitesTable'; -import Page from 'components/layout/Page'; +import useApi from 'hooks/useApi'; import useUser from 'hooks/useUser'; +const messages = defineMessages({ + saved: { id: 'messages.website-saved', defaultMessage: 'Website saved.' }, + noWebsites: { + id: 'messages.no-websites', + defaultMessage: "You don't have any websites configured.", + }, + websites: { id: 'label.websites', defaultMessage: 'Websites' }, + addWebsite: { id: 'label.add-website', defaultMessage: 'Add website' }, +}); + const { Plus } = Icons; export default function WebsitesList() { const [edit, setEdit] = useState(false); - const { get, useQuery } = useApi(); const { user } = useUser(); + const { get, useQuery } = useApi(); const { data, isLoading, error, refetch } = useQuery( ['websites', user?.id], () => get(`/users/${user?.id}/websites`), { enabled: !!user }, ); - const hasData = data && data.length !== 0; const { toast, showToast } = useToast(); - - const columns = [ - { name: 'name', label: 'Name', style: { flex: 2 } }, - { name: 'domain', label: 'Domain' }, - { name: 'action', label: ' ' }, - ]; - - const handleAdd = () => { - setEdit(true); - }; + const { formatMessage } = useIntl(); + const hasData = data && data.length !== 0; const handleSave = async () => { await refetch(); setEdit(false); - showToast({ message: 'Website saved.', variant: 'success' }); + showToast({ message: formatMessage(messages.saved), variant: 'success' }); }; - const handleClose = () => { - setEdit(false); - }; + const handleAdd = () => setEdit(true); + + const handleClose = () => setEdit(false); + + const addButton = ( + + ); return ( {toast} - - - - - {hasData && } + {addButton} + {hasData && } {!hasData && ( - - + + {addButton} )} {edit && ( - + {close => } )} diff --git a/components/pages/settings/websites/WebsitesTable.js b/components/pages/settings/websites/WebsitesTable.js index 856e3480..4a718f42 100644 --- a/components/pages/settings/websites/WebsitesTable.js +++ b/components/pages/settings/websites/WebsitesTable.js @@ -14,9 +14,15 @@ import styles from './WebsitesTable.module.css'; const { ArrowRight, External } = Icons; -export default function WebsitesTable({ columns = [], rows = [] }) { +const columns = [ + { name: 'name', label: 'Name', style: { flex: 2 } }, + { name: 'domain', label: 'Domain' }, + { name: 'action', label: ' ' }, +]; + +export default function WebsitesTable({ data = [] }) { return ( - +
{(column, index) => { return ( diff --git a/package.json b/package.json index cd5f4c79..3e3d6c79 100644 --- a/package.json +++ b/package.json @@ -59,9 +59,9 @@ ], "dependencies": { "@fontsource/inter": "4.5.7", - "@prisma/client": "4.8.0", + "@prisma/client": "4.9.0", "@tanstack/react-query": "^4.16.1", - "@umami/prisma-client": "^0.1.0", + "@umami/prisma-client": "^0.2.0", "@umami/redis-client": "^0.1.0", "chalk": "^4.1.1", "chart.js": "^2.9.4", @@ -94,7 +94,7 @@ "npm-run-all": "^4.1.5", "prop-types": "^15.7.2", "react": "^18.2.0", - "react-basics": "^0.50.0", + "react-basics": "^0.53.0", "react-beautiful-dnd": "^13.1.0", "react-dom": "^18.2.0", "react-intl": "^5.24.7", @@ -134,14 +134,14 @@ "postcss-preset-env": "7.8.3", "postcss-rtlcss": "^4.0.1", "prettier": "^2.6.2", - "prisma": "4.8.0", + "prisma": "4.9.0", "prompts": "2.4.2", "rollup": "^2.70.1", "rollup-plugin-terser": "^7.0.2", - "stylelint": "^14.5.3", + "stylelint": "^14.16.1", "stylelint-config-css-modules": "^4.1.0", "stylelint-config-prettier": "^9.0.3", - "stylelint-config-recommended": "^7.0.0", + "stylelint-config-recommended": "^9.0.0", "tar": "^6.1.2" } } diff --git a/pages/api/users/[id]/password.ts b/pages/api/me/password.ts similarity index 100% rename from pages/api/users/[id]/password.ts rename to pages/api/me/password.ts diff --git a/pages/settings/websites/[id]/index.js b/pages/settings/websites/[id]/index.js index 8c722eb5..81b6791c 100644 --- a/pages/settings/websites/[id]/index.js +++ b/pages/settings/websites/[id]/index.js @@ -1,5 +1,5 @@ import { useRouter } from 'next/router'; -import WebsiteDetails from 'components/pages/settings/websites/WebsiteDetails'; +import WebsiteSettings from 'components/pages/settings/websites/WebsiteSettings'; import useUser from 'hooks/useUser'; import AppLayout from 'components/layout/AppLayout'; @@ -14,7 +14,7 @@ export default function WebsiteSettingsPage() { return ( - + ); } diff --git a/yarn.lock b/yarn.lock index 2fc8a6af..84cf0654 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1603,37 +1603,37 @@ "@netlify/esbuild-windows-64" "0.14.39" "@netlify/esbuild-windows-arm64" "0.14.39" -"@netlify/functions@^1.3.0": - version "1.3.0" - resolved "https://registry.yarnpkg.com/@netlify/functions/-/functions-1.3.0.tgz#4305a3fb6b49caf56cd2be88d4b8534b1d5aff4f" - integrity sha512-hN/Fgpz8XIOBfsBPLYUMxVKBlCopgeqGB0popayicnmkFLnvKByTTMYgF01wcF9DBtBQdV0H2h1kPFpMl34I8w== +"@netlify/functions@^1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@netlify/functions/-/functions-1.4.0.tgz#027a2e5d54df5519ccbd14cf450231e97bbbf93a" + integrity sha512-gy7ULTIRroc2/jyFVGx1djCmmBMVisIwrvkqggq5B6iDcInRSy2Tpkm+V5C63hKJVkNRskKWtLQKm9ecCaQTjA== dependencies: is-promise "^4.0.0" -"@netlify/ipx@^1.3.2": - version "1.3.2" - resolved "https://registry.yarnpkg.com/@netlify/ipx/-/ipx-1.3.2.tgz#7235999c19d50349a4407d9548a7d8037e33db2d" - integrity sha512-IozNE8IDJiMsWvNG0HqSfArJKl1HhgvvPPNfWGieg5AIQzLxu57L7ol10DYBARsrVZWGZstM3J7sTaP6fbhdQw== +"@netlify/ipx@^1.3.3": + version "1.3.3" + resolved "https://registry.yarnpkg.com/@netlify/ipx/-/ipx-1.3.3.tgz#db28352ee1ed86d0b991cb8236f64a4dfbe70b8c" + integrity sha512-2rDdCGPDPW7cyJr57rwfvpouOJx34CLDgfa2yfqTKvPzqCMOqkCi1PN/rHGuvJ/k5trZ8rxmWnnZyEbeQaZcqA== dependencies: - "@netlify/functions" "^1.3.0" + "@netlify/functions" "^1.4.0" etag "^1.8.1" - fs-extra "^10.0.0" + fs-extra "^11.0.0" ipx "^0.9.11" micromatch "^4.0.5" mkdirp "^1.0.4" murmurhash "^2.0.0" node-fetch "^2.0.0" ufo "^1.0.0" - unstorage "^0.6.0" + unstorage "^1.0.0" "@netlify/plugin-nextjs@^4.27.3": - version "4.29.4" - resolved "https://registry.yarnpkg.com/@netlify/plugin-nextjs/-/plugin-nextjs-4.29.4.tgz#5261aeed4d19fdc8e46e295a1097ae6b79acdf84" - integrity sha512-tx1TSvtLa/tJUf1Z0XcToMONCYPXwPTJC1rEYJP5bh1qsBIqQxNYxKVgJOXjsBOgtmRD9l146UjbtF1a5Tockw== + version "4.30.0" + resolved "https://registry.yarnpkg.com/@netlify/plugin-nextjs/-/plugin-nextjs-4.30.0.tgz#1e4330ff1094057fc337d3b3504cf4a87b1cdbab" + integrity sha512-+MyfV6biKGVs/jQQUKGi2vN5aFFyRUTeEAItDiSvNhAUi0mOXEkEmu5JN7ZAQtL2oRIKKnxflsZDmtP3DdAahg== dependencies: "@netlify/esbuild" "0.14.39" - "@netlify/functions" "^1.3.0" - "@netlify/ipx" "^1.3.2" + "@netlify/functions" "^1.4.0" + "@netlify/ipx" "^1.3.3" "@vercel/node-bridge" "^2.1.0" chalk "^4.1.2" destr "^1.1.1" @@ -1752,22 +1752,22 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" -"@prisma/client@4.8.0": - version "4.8.0" - resolved "https://registry.yarnpkg.com/@prisma/client/-/client-4.8.0.tgz#6ec7adaca6a2e233d7e41dbe7cc6d0fa6143a407" - integrity sha512-Y1riB0p2W52kh3zgssP/YAhln3RjBFcJy3uwEiyjmU+TQYh6QTZDRFBo3JtBWuq2FyMOl1Rye8jxzUP+n0l5Cg== +"@prisma/client@4.9.0": + version "4.9.0" + resolved "https://registry.yarnpkg.com/@prisma/client/-/client-4.9.0.tgz#4a4068f3540732ea5723c008d49ed684d20f9340" + integrity sha512-bz6QARw54sWcbyR1lLnF2QHvRW5R/Jxnbbmwh3u+969vUKXtBkXgSgjDA85nji31ZBlf7+FrHDy5x+5ydGyQDg== dependencies: - "@prisma/engines-version" "4.8.0-61.d6e67a83f971b175a593ccc12e15c4a757f93ffe" + "@prisma/engines-version" "4.9.0-42.ceb5c99003b99c9ee2c1d2e618e359c14aef2ea5" -"@prisma/engines-version@4.8.0-61.d6e67a83f971b175a593ccc12e15c4a757f93ffe": - version "4.8.0-61.d6e67a83f971b175a593ccc12e15c4a757f93ffe" - resolved "https://registry.yarnpkg.com/@prisma/engines-version/-/engines-version-4.8.0-61.d6e67a83f971b175a593ccc12e15c4a757f93ffe.tgz#30401aba1029e7d32e3cb717e705a7c92ccc211e" - integrity sha512-MHSOSexomRMom8QN4t7bu87wPPD+pa+hW9+71JnVcF3DqyyO/ycCLhRL1we3EojRpZxKvuyGho2REQsMCvxcJw== +"@prisma/engines-version@4.9.0-42.ceb5c99003b99c9ee2c1d2e618e359c14aef2ea5": + version "4.9.0-42.ceb5c99003b99c9ee2c1d2e618e359c14aef2ea5" + resolved "https://registry.yarnpkg.com/@prisma/engines-version/-/engines-version-4.9.0-42.ceb5c99003b99c9ee2c1d2e618e359c14aef2ea5.tgz#9d817a5779fc05b107eb02f63d197ad296d60b3c" + integrity sha512-M16aibbxi/FhW7z1sJCX8u+0DriyQYY5AyeTH7plQm9MLnURoiyn3CZBqAyIoQ+Z1pS77usCIibYJWSgleBMBA== -"@prisma/engines@4.8.0": - version "4.8.0" - resolved "https://registry.yarnpkg.com/@prisma/engines/-/engines-4.8.0.tgz#5123c67dc0d2caa008268fc63081ca2d68b2ed7e" - integrity sha512-A1Asn2rxZMlLAj1HTyfaCv0VQrLUv034jVay05QlqZg1qiHPeA3/pGTfNMijbsMYCsGVxfWEJuaZZuNxXGMCrA== +"@prisma/engines@4.9.0": + version "4.9.0" + resolved "https://registry.yarnpkg.com/@prisma/engines/-/engines-4.9.0.tgz#05a1411964e047c1bc43f777c7a1c69f86a2a26c" + integrity sha512-t1pt0Gsp+HcgPJrHFc+d/ZSAaKKWar2G/iakrE07yeKPNavDP3iVKPpfXP22OTCHZUWf7OelwKJxQgKAm5hkgw== "@react-spring/animated@~9.5.5": version "9.5.5" @@ -2119,17 +2119,17 @@ dependencies: tslib "^2.4.0" -"@tanstack/query-core@4.20.4": - version "4.20.4" - resolved "https://registry.yarnpkg.com/@tanstack/query-core/-/query-core-4.20.4.tgz#1f7975a2db26a8bc2f382bad8a44cd422c846b17" - integrity sha512-lhLtGVNJDsJ/DyZXrLzekDEywQqRVykgBqTmkv0La32a/RleILXy6JMLBb7UmS3QCatg/F/0N9/5b0i5j6IKcA== +"@tanstack/query-core@4.22.0": + version "4.22.0" + resolved "https://registry.yarnpkg.com/@tanstack/query-core/-/query-core-4.22.0.tgz#7a786fcea64e229ed5d4308093dd644cdfaa895e" + integrity sha512-OeLyBKBQoT265f5G9biReijeP8mBxNFwY7ZUu1dKL+YzqpG5q5z7J/N1eT8aWyKuhyDTiUHuKm5l+oIVzbtrjw== "@tanstack/react-query@^4.16.1": - version "4.20.4" - resolved "https://registry.yarnpkg.com/@tanstack/react-query/-/react-query-4.20.4.tgz#562b34fb919adea884eccaba2b5be50e8ba7fb16" - integrity sha512-SJRxx13k/csb9lXAJfycgVA1N/yU/h3bvRNWP0+aHMfMjmbyX82FdoAcckDBbOdEyAupvb0byelNHNeypCFSyA== + version "4.22.0" + resolved "https://registry.yarnpkg.com/@tanstack/react-query/-/react-query-4.22.0.tgz#aaa4b41a6d306be6958018c74a8a3bb3e9f1924c" + integrity sha512-P9o+HjG42uB/xHR6dMsJaPhtZydSe4v0xdG5G/cEj1oHZAXelMlm67/rYJNQGKgBamKElKogj+HYGF+NY2yHYg== dependencies: - "@tanstack/query-core" "4.20.4" + "@tanstack/query-core" "4.22.0" use-sync-external-store "^1.2.0" "@trysound/sax@0.2.0": @@ -2336,10 +2336,10 @@ "@typescript-eslint/types" "5.45.0" eslint-visitor-keys "^3.3.0" -"@umami/prisma-client@^0.1.0": - version "0.1.0" - resolved "https://registry.yarnpkg.com/@umami/prisma-client/-/prisma-client-0.1.0.tgz#4ecc17b1998cb738b8f2027b80b003864beef6a4" - integrity sha512-2qTXN0dtMUT+HVhz37eVC02lDSwz9TGUGHRRO0LPRHdfJPfSkUF0D8pgksX7ETy3IZoIQP1h45tiXsM0pKBMZA== +"@umami/prisma-client@^0.2.0": + version "0.2.0" + resolved "https://registry.yarnpkg.com/@umami/prisma-client/-/prisma-client-0.2.0.tgz#b9de1f28be67ccfb9e2544f23c69c392c5b26ea7" + integrity sha512-+27dd4DLl8SvbbIYG1mdm6pIZd+UzQI7eZGNjQ9ONeWO0jr+/wiVnPIXUzd8w4R/OoM4ChpI3mBZPqcWa5MAOw== dependencies: debug "^4.3.4" @@ -2600,17 +2600,6 @@ array-find-index@^1.0.1: resolved "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz" integrity sha512-M1HQyIXcBGtVywBt8WVdim+lrNaK7VHp99Qt5pSNziXznKHViIBbXWtfRTpEFpF/c4FdfxNAsCCwPp5phBYJtw== -array-includes@^3.1.4: - version "3.1.5" - resolved "https://registry.npmjs.org/array-includes/-/array-includes-3.1.5.tgz" - integrity sha512-iSDYZMMyTPkiFasVqfuAQnWAYcvO/SeBSCGKePoEthjp4LEMTe4uLc7b025o4jAZpHhihh8xPo99TNWUWWkGDQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.19.5" - get-intrinsic "^1.1.1" - is-string "^1.0.7" - array-includes@^3.1.5, array-includes@^3.1.6: version "3.1.6" resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.6.tgz#9e9e720e194f198266ba9e18c29e6a9b0e4b225f" @@ -2627,14 +2616,14 @@ array-union@^2.1.0: resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== -array.prototype.flat@^1.2.5: - version "1.3.0" - resolved "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.0.tgz" - integrity sha512-12IUEkHsAhA4DY5s0FPgNXIdc8VRSqD9Zp78a5au9abH/SOBrsp082JOWFNTjkMozh8mqcdiKuaLGhPeYztxSw== +array.prototype.flat@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz#ffc6576a7ca3efc2f46a143b9d1dda9b4b3cf5e2" + integrity sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA== dependencies: call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" es-shim-unscopables "^1.0.0" array.prototype.flatmap@^1.3.1: @@ -2707,6 +2696,11 @@ autoprefixer@^10.4.13: picocolors "^1.0.0" postcss-value-parser "^4.2.0" +available-typed-arrays@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" + integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== + aws-sign2@~0.7.0: version "0.7.0" resolved "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz" @@ -3438,13 +3432,6 @@ debounce@^1.2.1: resolved "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz" integrity sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug== -debug@^2.6.9: - version "2.6.9" - resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - debug@^3.2.7: version "3.2.7" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" @@ -3514,7 +3501,7 @@ define-properties@^1.1.3, define-properties@^1.1.4: has-property-descriptors "^1.0.0" object-keys "^1.1.1" -defu@^6.0.0, defu@^6.1.0: +defu@^6.0.0, defu@^6.1.0, defu@^6.1.1: version "6.1.1" resolved "https://registry.yarnpkg.com/defu/-/defu-6.1.1.tgz#a12c712349197c545dc61d3cd3b607b4cc7ef0c1" integrity sha512-aA964RUCsBt0FGoNIlA3uFgo2hO+WWC0fiC6DBps/0SFzkKcYoM/3CzVLIa5xSsrFjdioMdYgAIbwo80qp2MoA== @@ -3543,7 +3530,7 @@ denque@^2.0.1: resolved "https://registry.yarnpkg.com/denque/-/denque-2.1.0.tgz#e93e1a6569fb5e66f16a3c2a2964617d349d6ab1" integrity sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw== -destr@^1.1.1, destr@^1.2.0: +destr@^1.1.1, destr@^1.2.0, destr@^1.2.1, destr@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/destr/-/destr-1.2.2.tgz#7ba9befcafb645a50e76b260449c63927b51e22f" integrity sha512-lrbCJwD9saUQrqUfXvl6qoM+QN3W7tLV5pAOs+OqOmopCCz/JkE05MHedJR1xfk4IAnZuJXPVuN5+7jNA2ZCiA== @@ -3680,7 +3667,46 @@ error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" -es-abstract@^1.19.0, es-abstract@^1.19.1, es-abstract@^1.19.2, es-abstract@^1.19.5, es-abstract@^1.20.4: +es-abstract@^1.19.0, es-abstract@^1.20.4: + version "1.21.1" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.21.1.tgz#e6105a099967c08377830a0c9cb589d570dd86c6" + integrity sha512-QudMsPOz86xYz/1dG1OuGBKOELjCh99IIWHLzy5znUB6j8xG2yMA7bfTV86VSqKF+Y/H08vQPR+9jyXpuC6hfg== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + es-set-tostringtag "^2.0.1" + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + function.prototype.name "^1.1.5" + get-intrinsic "^1.1.3" + get-symbol-description "^1.0.0" + globalthis "^1.0.3" + gopd "^1.0.1" + has "^1.0.3" + has-property-descriptors "^1.0.0" + has-proto "^1.0.1" + has-symbols "^1.0.3" + internal-slot "^1.0.4" + is-array-buffer "^3.0.1" + is-callable "^1.2.7" + is-negative-zero "^2.0.2" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.2" + is-string "^1.0.7" + is-typed-array "^1.1.10" + is-weakref "^1.0.2" + object-inspect "^1.12.2" + object-keys "^1.1.1" + object.assign "^4.1.4" + regexp.prototype.flags "^1.4.3" + safe-regex-test "^1.0.0" + string.prototype.trimend "^1.0.6" + string.prototype.trimstart "^1.0.6" + typed-array-length "^1.0.4" + unbox-primitive "^1.0.2" + which-typed-array "^1.1.9" + +es-abstract@^1.19.1: version "1.20.4" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.20.4.tgz#1d103f9f8d78d4cf0713edcd6d0ed1a46eed5861" integrity sha512-0UtvRN79eMe2L+UNEF1BwRe364sj/DXhQ/k5FmivgoSdpM90b8Jc0mDzKMGo7QS0BVbOP/bTwBKNnDc9rNzaPA== @@ -3710,6 +3736,15 @@ es-abstract@^1.19.0, es-abstract@^1.19.1, es-abstract@^1.19.2, es-abstract@^1.19 string.prototype.trimstart "^1.0.5" unbox-primitive "^1.0.2" +es-set-tostringtag@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz#338d502f6f674301d710b80c8592de8a15f09cd8" + integrity sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg== + dependencies: + get-intrinsic "^1.1.3" + has "^1.0.3" + has-tostringtag "^1.0.0" + es-shim-unscopables@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz#702e632193201e3edf8713635d083d378e510241" @@ -3757,22 +3792,23 @@ eslint-config-next@^12.2.4: eslint-plugin-react-hooks "^4.5.0" eslint-config-prettier@^8.5.0: - version "8.5.0" - resolved "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz" - integrity sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q== + version "8.6.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.6.0.tgz#dec1d29ab728f4fa63061774e1672ac4e363d207" + integrity sha512-bAF0eLpLVqP5oEVUFKpMA+NnRFICwn9X8B5jrR9FcqnYBuPbqWEjTEspPWMj5ye6czoSLDweCzSo3Ko7gGrZaA== eslint-import-resolver-alias@^1.1.2: version "1.1.2" resolved "https://registry.npmjs.org/eslint-import-resolver-alias/-/eslint-import-resolver-alias-1.1.2.tgz" integrity sha512-WdviM1Eu834zsfjHtcGHtGfcu+F30Od3V7I9Fi57uhBEwPkjDcii7/yW8jAT+gOhn4P/vOxxNAXbFAKsrrc15w== -eslint-import-resolver-node@^0.3.6: - version "0.3.6" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz#4048b958395da89668252001dbd9eca6b83bacbd" - integrity sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw== +eslint-import-resolver-node@^0.3.6, eslint-import-resolver-node@^0.3.7: + version "0.3.7" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz#83b375187d412324a1963d84fa664377a23eb4d7" + integrity sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA== dependencies: debug "^3.2.7" - resolve "^1.20.0" + is-core-module "^2.11.0" + resolve "^1.22.1" eslint-import-resolver-typescript@^2.7.1: version "2.7.1" @@ -3785,30 +3821,32 @@ eslint-import-resolver-typescript@^2.7.1: resolve "^1.22.0" tsconfig-paths "^3.14.1" -eslint-module-utils@^2.7.3: +eslint-module-utils@^2.7.4: version "2.7.4" - resolved "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz#4f3e41116aaf13a20792261e61d3a2e7e0583974" integrity sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA== dependencies: debug "^3.2.7" eslint-plugin-import@^2.26.0: - version "2.26.0" - resolved "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz" - integrity sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA== + version "2.27.5" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz#876a6d03f52608a3e5bb439c2550588e51dd6c65" + integrity sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow== dependencies: - array-includes "^3.1.4" - array.prototype.flat "^1.2.5" - debug "^2.6.9" + array-includes "^3.1.6" + array.prototype.flat "^1.3.1" + array.prototype.flatmap "^1.3.1" + debug "^3.2.7" doctrine "^2.1.0" - eslint-import-resolver-node "^0.3.6" - eslint-module-utils "^2.7.3" + eslint-import-resolver-node "^0.3.7" + eslint-module-utils "^2.7.4" has "^1.0.3" - is-core-module "^2.8.1" + is-core-module "^2.11.0" is-glob "^4.0.3" minimatch "^3.1.2" - object.values "^1.1.5" - resolve "^1.22.0" + object.values "^1.1.6" + resolve "^1.22.1" + semver "^6.3.0" tsconfig-paths "^3.14.1" eslint-plugin-jsx-a11y@^6.5.1: @@ -4106,9 +4144,9 @@ fastest-levenshtein@^1.0.16: integrity sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg== fastq@^1.6.0: - version "1.14.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.14.0.tgz#107f69d7295b11e0fccc264e1fc6389f623731ce" - integrity sha512-eR2D+V9/ExcbF9ls441yIuN6TI2ED1Y2ZcA5BmMtJsOkWOFRJQ0Jt0g1UwqXJJVAb+V+umH5Dfr8oh4EVP7VVg== + version "1.15.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a" + integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== dependencies: reusify "^1.0.4" @@ -4165,6 +4203,13 @@ follow-redirects@^1.15.2: resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== +for-each@^0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" + integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== + dependencies: + is-callable "^1.1.3" + forever-agent@~0.6.1: version "0.6.1" resolved "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz" @@ -4218,6 +4263,15 @@ fs-extra@10, fs-extra@^10.0.0, fs-extra@^10.0.1: jsonfile "^6.0.1" universalify "^2.0.0" +fs-extra@^11.0.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.1.0.tgz#5784b102104433bb0e090f48bfc4a30742c357ed" + integrity sha512-0rcTq621PD5jM/e0a3EJoGC/1TC5ZBCERW82LQuwfGnCa1V8w7dpYH1yNu+SLb6E5dkeCBzKEyLGlFrnr+dUyw== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + fs-extra@^9.0.0: version "9.1.0" resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz" @@ -4285,7 +4339,7 @@ gensync@^1.0.0-beta.2: resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== -get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3: +get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.3.tgz#063c84329ad93e83893c7f4f243ef63ffa351385" integrity sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A== @@ -4390,6 +4444,13 @@ globals@^13.6.0, globals@^13.9.0: dependencies: type-fest "^0.20.2" +globalthis@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf" + integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA== + dependencies: + define-properties "^1.1.3" + globalyzer@0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/globalyzer/-/globalyzer-0.1.0.tgz#cb76da79555669a1519d5a8edf093afaa0bf1465" @@ -4417,6 +4478,13 @@ globrex@^0.1.2: resolved "https://registry.yarnpkg.com/globrex/-/globrex-0.1.2.tgz#dd5d9ec826232730cd6793a5e33a9302985e6098" integrity sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg== +gopd@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" + integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== + dependencies: + get-intrinsic "^1.1.3" + graceful-fs@^4.1.15: version "4.2.9" resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz" @@ -4427,15 +4495,15 @@ graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4: resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz" integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== -h3@^0.8.1: - version "0.8.6" - resolved "https://registry.yarnpkg.com/h3/-/h3-0.8.6.tgz#8095ef998fe14769b87170b7c8b68ba9c54973d5" - integrity sha512-CSWNOKa3QGo67rFU2PhbFTp0uPJtilNji2Z0pMiSRQt3+OkIW0u3E1WMJqIycLqaTgb9JyFqH/S4mcTyyGtvyQ== +h3@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/h3/-/h3-1.0.2.tgz#3a2992921a62de697bd4a3f449401f7600116df6" + integrity sha512-25QqjQMz8pX1NI2rZ/ziNT9B8Aog7jmu2a0o8Qm9kKoH3zOhE+2icVs069h6DEp0g1Dst1+zKfRdRYcK0MogJA== dependencies: cookie-es "^0.5.0" - destr "^1.2.0" - radix3 "^0.2.1" - ufo "^0.8.6" + destr "^1.2.2" + radix3 "^1.0.0" + ufo "^1.0.1" har-schema@^2.0.0: version "2.0.0" @@ -4477,6 +4545,11 @@ has-property-descriptors@^1.0.0: dependencies: get-intrinsic "^1.1.1" +has-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" + integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== + has-symbols@^1.0.2, has-symbols@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" @@ -4565,9 +4638,9 @@ image-meta@^0.1.1: integrity sha512-+oXiHwOEPr1IE5zY0tcBLED/CYcre15J4nwL50x3o0jxWqEkyjrusiKP3YSU+tr9fvJp33ZcP5Gpj2295g3aEw== immer@^9.0.12: - version "9.0.16" - resolved "https://registry.yarnpkg.com/immer/-/immer-9.0.16.tgz#8e7caab80118c2b54b37ad43e05758cdefad0198" - integrity sha512-qenGE7CstVm1NrHQbMh8YaSzTZTFNP3zPqr3YU0S0UY441j4bJTg4A2Hh5KAhwgaiU6ZZ1Ar6y/2f4TblnMReQ== + version "9.0.18" + resolved "https://registry.yarnpkg.com/immer/-/immer-9.0.18.tgz#d2faee58fd0e34f017f329b98cdab37826fa31b8" + integrity sha512-eAPNpsj7Ax1q6Y/3lm2PmlwRcFzpON7HSNQ3ru5WQH1/PSpnyed/HpNOELl2CxLKoj4r+bAHgdyKqW5gc2Se1A== import-fresh@^3.0.0, import-fresh@^3.2.1: version "3.3.0" @@ -4610,12 +4683,12 @@ ini@^1.3.5, ini@~1.3.0: resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== -internal-slot@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c" - integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA== +internal-slot@^1.0.3, internal-slot@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.4.tgz#8551e7baf74a7a6ba5f749cfb16aa60722f0d6f3" + integrity sha512-tA8URYccNzMo94s5MQZgH8NB/XTa6HsOo0MLfXTKKEnHVVdegzaQoFZ7Jp44bdvLvY2waT5dc+j5ICEswhi7UQ== dependencies: - get-intrinsic "^1.1.0" + get-intrinsic "^1.1.3" has "^1.0.3" side-channel "^1.0.4" @@ -4649,10 +4722,10 @@ intl-messageformat@9.13.0: "@formatjs/icu-messageformat-parser" "2.1.0" tslib "^2.1.0" -ioredis@^5.2.3: - version "5.2.4" - resolved "https://registry.yarnpkg.com/ioredis/-/ioredis-5.2.4.tgz#9e262a668bc29bae98f2054c1e0d7efd86996b96" - integrity sha512-qIpuAEt32lZJQ0XyrloCRdlEdUUNGG9i0UOk6zgzK6igyudNWqEBxfH6OlbnOOoBBvr1WB02mm8fR55CnikRng== +ioredis@^5.2.4: + version "5.2.5" + resolved "https://registry.yarnpkg.com/ioredis/-/ioredis-5.2.5.tgz#c62dc3945ad2a8f0323fbb2765b934a84a68cde0" + integrity sha512-7HKo/ClM2DGLRXdFq8ruS3Uuadensz4A76wPOU0adqlOqd1qkhoLPDaBhmVhUhNGpB+J65/bhLmNB8DDY99HJQ== dependencies: "@ioredis/commands" "^1.1.1" cluster-key-slot "^1.1.0" @@ -4691,6 +4764,15 @@ ipx@^0.9.11: ufo "^0.8.5" xss "^1.0.14" +is-array-buffer@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.1.tgz#deb1db4fcae48308d54ef2442706c0393997052a" + integrity sha512-ASfLknmY8Xa2XtB4wmbz13Wu202baeA18cJBCeCy0wXUHZF0IPyVEXqKEcd+t2fNSLLL1vC6k7lxZEojNbISXQ== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.3" + is-typed-array "^1.1.10" + is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" @@ -4723,7 +4805,7 @@ is-boolean-object@^1.1.0: call-bind "^1.0.2" has-tostringtag "^1.0.0" -is-callable@^1.1.4, is-callable@^1.2.7: +is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: version "1.2.7" resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== @@ -4735,20 +4817,13 @@ is-ci@^3.0.1: dependencies: ci-info "^3.2.0" -is-core-module@^2.5.0, is-core-module@^2.9.0: +is-core-module@^2.11.0, is-core-module@^2.5.0, is-core-module@^2.8.1, is-core-module@^2.9.0: version "2.11.0" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.11.0.tgz#ad4cb3e3863e814523c96f3f58d26cc570ff0144" integrity sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw== dependencies: has "^1.0.3" -is-core-module@^2.8.1: - version "2.10.0" - resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz" - integrity sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg== - dependencies: - has "^1.0.3" - is-date-object@^1.0.1: version "1.0.5" resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" @@ -4879,6 +4954,17 @@ is-symbol@^1.0.2, is-symbol@^1.0.3: dependencies: has-symbols "^1.0.2" +is-typed-array@^1.1.10, is-typed-array@^1.1.9: + version "1.1.10" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.10.tgz#36a5b5cb4189b575d1a3e4b08536bfb485801e3f" + integrity sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + for-each "^0.3.3" + gopd "^1.0.1" + has-tostringtag "^1.0.0" + is-typedarray@^1.0.0, is-typedarray@~1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz" @@ -4993,9 +5079,9 @@ json-stringify-safe@~5.0.1: integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== json5@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" - integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== + version "1.0.2" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" + integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== dependencies: minimist "^1.2.0" @@ -5152,19 +5238,19 @@ listhen@^0.2.15: selfsigned "^2.0.1" ufo "^0.8.5" -listhen@^0.3.4: - version "0.3.5" - resolved "https://registry.yarnpkg.com/listhen/-/listhen-0.3.5.tgz#04a0f6dbdab5bbac711992004a37c8306fad3e4e" - integrity sha512-suyt79hNmCFeBIyftcLqLPfYiXeB795gSUWOJT7nspl2IvREY0Q9xvchLhekxvQ0KiOPvWoyALnc9Mxoelm0Pw== +listhen@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/listhen/-/listhen-1.0.1.tgz#31054d08d850ad21473768085a50a8b34a635070" + integrity sha512-RBzBGHMCc5wP8J5Vf8WgF4CAJH8dWHi9LaKB7vfzZt54CiH/0dp01rudy2hFD9wCrTM+UfxFVnn5wTIiY+Qhiw== dependencies: clipboardy "^3.0.0" colorette "^2.0.19" - defu "^6.1.0" + defu "^6.1.1" get-port-please "^2.6.1" http-shutdown "^1.2.2" ip-regex "^5.0.0" node-forge "^1.3.1" - ufo "^0.8.6" + ufo "^1.0.0" listr2@^3.12.2: version "3.14.0" @@ -5525,9 +5611,9 @@ mmdb-lib@2.0.2: integrity sha512-shi1I+fCPQonhTi7qyb6hr7hi87R7YS69FlfJiMFuJ12+grx0JyL56gLNzGTYXPU7EhAPkMLliGeyHer0K+AVA== moize@^6.1.0: - version "6.1.4" - resolved "https://registry.yarnpkg.com/moize/-/moize-6.1.4.tgz#8e79b62a4a0519229b013522ae27d1b00c0b0c2d" - integrity sha512-Ga8V0iu7XHDz6GR50pAaGjc3hJ5CVmWUgQRyWFAn4pYrBzITx9dMlXOGhURP2qmO3WTeOC9Yu17MlFV6PY2m/g== + version "6.1.5" + resolved "https://registry.yarnpkg.com/moize/-/moize-6.1.5.tgz#e9a589685a3de4266eeb5f2bbfdfe1a173265f1a" + integrity sha512-Fu46qKV9F8DOi2vXimR3yRw/JAJfFRQEFZeclvOFnG92AEFERqwFtu4PIxETYFtCghHGlU1itKcvvNioKgWGIw== dependencies: fast-equals "^3.0.1" micro-memoize "^4.0.11" @@ -5556,11 +5642,6 @@ mri@^1.2.0: resolved "https://registry.yarnpkg.com/mri/-/mri-1.2.0.tgz#6721480fec2a11a4889861115a48b6cbe7cc8f0b" integrity sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA== -ms@2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" - integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== - ms@2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" @@ -5637,16 +5718,16 @@ nice-try@^1.0.4: integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== node-abi@^3.3.0: - version "3.30.0" - resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.30.0.tgz#d84687ad5d24ca81cdfa912a36f2c5c19b137359" - integrity sha512-qWO5l3SCqbwQavymOmtTVuCWZE23++S+rxyoHjXqUmPyzRcaoI4lA2gO55/drddGnedAyjA7sk76SfQ5lfUMnw== + version "3.31.0" + resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.31.0.tgz#dfb2ea3d01188eb80859f69bb4a4354090c1b355" + integrity sha512-eSKV6s+APenqVh8ubJyiu/YhZgxQpGP66ntzUb3lY1xB9ukSRaGnx0AIxI+IM+1+IVYC1oWobgG5L3Lt9ARykQ== dependencies: semver "^7.3.5" node-addon-api@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-5.0.0.tgz#7d7e6f9ef89043befdb20c1989c905ebde18c501" - integrity sha512-CvkDw2OEnme7ybCykJpVcKH+uAOLV2qLqiyla128dN9TkEWfrYmxG6C2boDe5KcNQqZF3orkqzGgOMvZ/JNekA== + version "5.1.0" + resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-5.1.0.tgz#49da1ca055e109a23d537e9de43c09cca21eb762" + integrity sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA== node-domexception@^1.0.0: version "1.0.0" @@ -5658,10 +5739,15 @@ node-fetch-native@^0.1.8: resolved "https://registry.yarnpkg.com/node-fetch-native/-/node-fetch-native-0.1.8.tgz#19e2eaf6d86ac14e711ebd2612f40517c3468f2a" integrity sha512-ZNaury9r0NxaT2oL65GvdGDy+5PlSaHTovT6JV5tOW07k1TQmgC0olZETa4C9KZg0+6zBr99ctTYa3Utqj9P/Q== +node-fetch-native@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/node-fetch-native/-/node-fetch-native-1.0.1.tgz#1dfe78f57545d07e07016b7df4c0cb9d2ff416c7" + integrity sha512-VzW+TAk2wE4X9maiKMlT+GsPU4OMmR1U9CrHSmd3DFLn2IcZ9VJ6M6BBugGfYUnPCLSYxXdZy17M0BEJyhUTwg== + node-fetch@^2.0.0, node-fetch@^2.6.6: - version "2.6.7" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" - integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== + version "2.6.8" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.8.tgz#a68d30b162bc1d8fd71a367e81b997e1f4d4937e" + integrity sha512-RZ6dBYuj8dRSfxpUSu+NsdF1dpPpluJxwOp+6IoDp/sH2QNDSvurYsAa+F1WxY2RjA1iP93xhcsUoYbF2XBqVg== dependencies: whatwg-url "^5.0.0" @@ -5759,9 +5845,9 @@ object-assign@^4, object-assign@^4.1.1: integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= object-inspect@^1.12.2, object-inspect@^1.9.0: - version "1.12.2" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea" - integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ== + version "1.12.3" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" + integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== object-keys@^1.1.1: version "1.1.1" @@ -5804,7 +5890,7 @@ object.hasown@^1.1.2: define-properties "^1.1.4" es-abstract "^1.20.4" -object.values@^1.1.5, object.values@^1.1.6: +object.values@^1.1.6: version "1.1.6" resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.6.tgz#4abbaa71eba47d63589d402856f908243eea9b1d" integrity sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw== @@ -5813,7 +5899,16 @@ object.values@^1.1.5, object.values@^1.1.6: define-properties "^1.1.4" es-abstract "^1.20.4" -ohmyfetch@^0.4.18, ohmyfetch@^0.4.19: +ofetch@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/ofetch/-/ofetch-1.0.0.tgz#5a2604cdcb33349900e4f73ffe44de449a61101a" + integrity sha512-d40aof8czZFSQKJa4+F7Ch3UC5D631cK1TTUoK+iNEut9NoiCL+u0vykl/puYVUS2df4tIQl5upQcolIcEzQjQ== + dependencies: + destr "^1.2.1" + node-fetch-native "^1.0.1" + ufo "^1.0.0" + +ohmyfetch@^0.4.18: version "0.4.21" resolved "https://registry.yarnpkg.com/ohmyfetch/-/ohmyfetch-0.4.21.tgz#6850db751fc7bbf08153aa8b11ff1ef45fcfd963" integrity sha512-VG7f/JRvqvBOYvL0tHyEIEG7XHWm7OqIfAs6/HqwWwDfjiJ1g0huIpe5sFEmyb+7hpFa1EGNH2aERWR72tlClw== @@ -5863,7 +5958,7 @@ p-limit@^2.2.0: p-limit@^3.1.0: version "3.1.0" - resolved "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== dependencies: yocto-queue "^0.1.0" @@ -6354,21 +6449,21 @@ prettier-linter-helpers@^1.0.0: fast-diff "^1.1.2" prettier@^2.6.2: - version "2.8.1" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.1.tgz#4e1fd11c34e2421bc1da9aea9bd8127cd0a35efc" - integrity sha512-lqGoSJBQNJidqCHE80vqZJHWHRFoNYsSpP9AjFhlhi9ODCJA541svILes/+/1GM3VaL/abZi7cpFzOpdR9UPKg== + version "2.8.3" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.3.tgz#ab697b1d3dd46fb4626fbe2f543afe0cc98d8632" + integrity sha512-tJ/oJ4amDihPoufT5sM0Z1SKEuKay8LfVAMlbbhnnkvt6BUserZylqo2PN+p9KeljLr0OHa2rXHU1T8reeoTrw== pretty-bytes@^5.6.0: version "5.6.0" resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.6.0.tgz#356256f643804773c82f64723fe78c92c62beaeb" integrity sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg== -prisma@4.8.0: - version "4.8.0" - resolved "https://registry.yarnpkg.com/prisma/-/prisma-4.8.0.tgz#634dbbdc9d3f76c61604880251673d08ccb6f02b" - integrity sha512-DWIhxvxt8f4h6MDd35mz7BJff+fu7HItW3WPDIEpCR3RzcOWyiHBbLQW5/DOgmf+pRLTjwXQob7kuTZVYUAw5w== +prisma@4.9.0: + version "4.9.0" + resolved "https://registry.yarnpkg.com/prisma/-/prisma-4.9.0.tgz#295954b2a89cd35a0e6bcf66b2b036dbf80c75ee" + integrity sha512-bS96oZ5oDFXYgoF2l7PJ3Mp1wWWfLOo8B/jAfbA2Pn0Wm5Z/owBHzaMQKS3i1CzVBDWWPVnOohmbJmjvkcHS5w== dependencies: - "@prisma/engines" "4.8.0" + "@prisma/engines" "4.9.0" progress@^2.0.0: version "2.0.3" @@ -6440,10 +6535,10 @@ quick-lru@^4.0.1: resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-4.0.1.tgz#5b8878f113a58217848c6482026c73e1ba57727f" integrity sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g== -radix3@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/radix3/-/radix3-0.2.1.tgz#77e66a41c7ba5600a8bc137fd259ef661d314418" - integrity sha512-FnhArTl5Tq7dodiLeSPKrDUyCQuJqEncP8cKdyy399g8F/cz7GH6FmzA3Rkosu2IZMkpswFFwXfb2ERSiL06pg== +radix3@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/radix3/-/radix3-1.0.0.tgz#d1c760b850206a6bd5dfd26820c25903cb20eccc" + integrity sha512-6n3AEXth91ASapMVKiEh2wrbFJmI+NBilrWE0AbiGgfm0xet0QXC8+a3K19r1UVYjUjctUgB053c3V/J6V0kCQ== raf-schd@^4.0.2: version "4.0.3" @@ -6467,10 +6562,10 @@ rc@^1.2.7: minimist "^1.2.0" strip-json-comments "~2.0.1" -react-basics@^0.50.0: - version "0.50.0" - resolved "https://registry.yarnpkg.com/react-basics/-/react-basics-0.50.0.tgz#1784ce05f0361dd208804a273954dd50b8ec8b6f" - integrity sha512-hf9pbYuVSNqI7tlhO/5Ry1GfcWINKJgDkmDbFVCKSYYyiiycqDcsIyaXGn+pSxvWUj3Lk8YJep7INFeUMxA35A== +react-basics@^0.53.0: + version "0.53.0" + resolved "https://registry.yarnpkg.com/react-basics/-/react-basics-0.53.0.tgz#2215ca47bca99a316cd129875682960d6519611f" + integrity sha512-XsG38JsumhHvqGaVnY7oRErs7Ub1Td1GjFE0VG4Uc7SlwRzK1idmtaZGW6dbPpHhmwkDNa7xnohRaKgRBmP2pg== dependencies: classnames "^2.3.1" react "^18.2.0" @@ -6863,7 +6958,7 @@ resolve@^1.1.7: path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" -resolve@^1.10.0, resolve@^1.14.2, resolve@^1.20.0, resolve@^1.22.0: +resolve@^1.10.0, resolve@^1.14.2, resolve@^1.22.0, resolve@^1.22.1: version "1.22.1" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== @@ -7274,7 +7369,7 @@ string.prototype.padend@^3.0.0: define-properties "^1.1.3" es-abstract "^1.19.1" -string.prototype.trimend@^1.0.5: +string.prototype.trimend@^1.0.5, string.prototype.trimend@^1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz#c4a27fa026d979d79c04f17397f250a462944533" integrity sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ== @@ -7283,7 +7378,7 @@ string.prototype.trimend@^1.0.5: define-properties "^1.1.4" es-abstract "^1.20.4" -string.prototype.trimstart@^1.0.5: +string.prototype.trimstart@^1.0.5, string.prototype.trimstart@^1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz#e90ab66aa8e4007d92ef591bbf3cd422c56bdcf4" integrity sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA== @@ -7369,10 +7464,10 @@ stylelint-config-prettier@^9.0.3: resolved "https://registry.yarnpkg.com/stylelint-config-prettier/-/stylelint-config-prettier-9.0.4.tgz#1b1dda614d5b3ef6c1f583fa6fa55f88245eb00b" integrity sha512-38nIGTGpFOiK5LjJ8Ma1yUgpKENxoKSOhbDNSemY7Ep0VsJoXIW9Iq/2hSt699oB9tReynfWicTAoIHiq8Rvbg== -stylelint-config-recommended@^7.0.0: - version "7.0.0" - resolved "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-7.0.0.tgz" - integrity sha512-yGn84Bf/q41J4luis1AZ95gj0EQwRX8lWmGmBwkwBNSkpGSpl66XcPTulxGa/Z91aPoNGuIGBmFkcM1MejMo9Q== +stylelint-config-recommended@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/stylelint-config-recommended/-/stylelint-config-recommended-9.0.0.tgz#1c9e07536a8cd875405f8ecef7314916d94e7e40" + integrity sha512-9YQSrJq4NvvRuTbzDsWX3rrFOzOlYBmZP+o513BJN/yfEmGSr0AxdvrWs0P/ilSpVV/wisamAHu5XSk8Rcf4CQ== stylelint-scss@^4.2.0: version "4.2.0" @@ -7385,10 +7480,10 @@ stylelint-scss@^4.2.0: postcss-selector-parser "^6.0.6" postcss-value-parser "^4.1.0" -stylelint@^14.5.3: - version "14.16.0" - resolved "https://registry.yarnpkg.com/stylelint/-/stylelint-14.16.0.tgz#8e1a424f4b9852e59089f95de306734d70e5048b" - integrity sha512-X6uTi9DcxjzLV8ZUAjit1vsRtSwcls0nl07c9rqOPzvpA8IvTX/xWEkBRowS0ffevRrqkHa/ThDEu86u73FQDg== +stylelint@^14.16.1: + version "14.16.1" + resolved "https://registry.yarnpkg.com/stylelint/-/stylelint-14.16.1.tgz#b911063530619a1bbe44c2b875fd8181ebdc742d" + integrity sha512-ErlzR/T3hhbV+a925/gbfc3f3Fep9/bnspMiJPorfGEmcBbXdS+oo6LrVtoUZ/w9fqD6o6k7PtUlCOsCRdjX/A== dependencies: "@csstools/selector-specificity" "^2.0.2" balanced-match "^2.0.0" @@ -7725,6 +7820,15 @@ type-fest@^0.8.1: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== +typed-array-length@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.4.tgz#89d83785e5c4098bec72e08b319651f0eac9c1bb" + integrity sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng== + dependencies: + call-bind "^1.0.2" + for-each "^0.3.3" + is-typed-array "^1.1.9" + typedarray-to-buffer@^3.1.5: version "3.1.5" resolved "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz" @@ -7747,7 +7851,7 @@ ufo@^0.8.5, ufo@^0.8.6: resolved "https://registry.yarnpkg.com/ufo/-/ufo-0.8.6.tgz#c0ec89bc0e0c9fa59a683680feb0f28b55ec323b" integrity sha512-fk6CmUgwKCfX79EzcDQQpSCMxrHstvbLswFChHS0Vump+kFkw7nJBfTZoC1j0bOGoY9I7R3n2DGek5ajbcYnOw== -ufo@^1.0.0: +ufo@^1.0.0, ufo@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/ufo/-/ufo-1.0.1.tgz#64ed43b530706bda2e4892f911f568cf4cf67d29" integrity sha512-boAm74ubXHY7KJQZLlXrtMz52qFvpsbOxDcZOnw/Wf+LS4Mmyu7JxmzD4tDLtUQtmZECypJ0FrCz4QIe6dvKRA== @@ -7763,9 +7867,9 @@ unbox-primitive@^1.0.2: which-boxed-primitive "^1.0.2" undici@^5.12.0: - version "5.14.0" - resolved "https://registry.yarnpkg.com/undici/-/undici-5.14.0.tgz#1169d0cdee06a4ffdd30810f6228d57998884d00" - integrity sha512-yJlHYw6yXPPsuOH0x2Ib1Km61vu4hLiRRQoafs+WUgX1vO64vgnxiCEN9dpIrhZyHFsai3F0AEj4P9zy19enEQ== + version "5.15.1" + resolved "https://registry.yarnpkg.com/undici/-/undici-5.15.1.tgz#5292454b1441da486a80c0f3ada1e88f1765ff8d" + integrity sha512-XLk8g0WAngdvFqTI+VKfBtM4YWXgdxkf1WezC771Es0Dd+Pm1KmNx8t93WTC+Hh9tnghmVxkclU1HN+j+CvIUA== dependencies: busboy "^1.6.0" @@ -7820,22 +7924,22 @@ universalify@^2.0.0: resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== -unstorage@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/unstorage/-/unstorage-0.6.0.tgz#9a70d770d08ed8dbb87f4aa5fbf7700baf4a641d" - integrity sha512-X05PIq28pVNA1BypX6Y00YNqAsHM25MGemvpjHeYvwJ8/wg936GoO1YD+VdWlqm3LmVX4fNJ5tlC7uhXsMPgeg== +unstorage@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/unstorage/-/unstorage-1.0.1.tgz#8cac09e435e727f68ac8ffdac10caa1a5b35883d" + integrity sha512-J1c4b8K2KeihHrQtdgl/ybIapArUbPaPb+TyJy/nGSauDwDYqciZsEKdkee568P3c8SSH4TIgnGRHDWMPGw+Lg== dependencies: anymatch "^3.1.2" chokidar "^3.5.3" - destr "^1.1.1" - h3 "^0.8.1" - ioredis "^5.2.3" - listhen "^0.3.4" + destr "^1.2.1" + h3 "^1.0.1" + ioredis "^5.2.4" + listhen "^1.0.0" mkdir "^0.0.2" mri "^1.2.0" - ohmyfetch "^0.4.19" - ufo "^0.8.6" - ws "^8.9.0" + ofetch "^1.0.0" + ufo "^1.0.0" + ws "^8.11.0" update-browserslist-db@^1.0.9: version "1.0.10" @@ -7949,6 +8053,18 @@ which-boxed-primitive@^1.0.2: is-string "^1.0.5" is-symbol "^1.0.3" +which-typed-array@^1.1.9: + version "1.1.9" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.9.tgz#307cf898025848cf995e795e8423c7f337efbde6" + integrity sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + for-each "^0.3.3" + gopd "^1.0.1" + has-tostringtag "^1.0.0" + is-typed-array "^1.1.10" + which@^1.2.9, which@^1.3.1: version "1.3.1" resolved "https://registry.npmjs.org/which/-/which-1.3.1.tgz" @@ -8021,10 +8137,10 @@ write-json-file@^4.3.0: sort-keys "^4.0.0" write-file-atomic "^3.0.0" -ws@^8.9.0: - version "8.11.0" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.11.0.tgz#6a0d36b8edfd9f96d8b25683db2f8d7de6e8e143" - integrity sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg== +ws@^8.11.0: + version "8.12.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.12.0.tgz#485074cc392689da78e1828a9ff23585e06cddd8" + integrity sha512-kU62emKIdKVeEIOIKVegvqpXMSTAMLJozpHZaJNDYqBjzlSYXQGviYwN1osDLJ9av68qHd4a2oSjd7yD4pacig== xss@^1.0.14: version "1.0.14"