__id);
return state
.concat(data.filter(({ __id }) => !ids.includes(__id)))
- .filter(({ created_at }) => new Date(created_at).getTime() >= time);
+ .filter(({ createdAt }) => new Date(createdAt).getTime() >= time);
}
function filterWebsite(data, id) {
- return data.filter(({ website_id }) => website_id === id);
+ return data.filter(({ websiteId }) => websiteId === id);
}
export default function RealtimeDashboard() {
const { locale } = useLocale();
const countryNames = useCountryNames(locale);
const [data, setData] = useState();
- const [websiteId, setWebsiteId] = useState(0);
+ const [websiteId, setWebsiteId] = useState(null);
const { data: init, loading } = useFetch('/realtime/init');
const { data: updates } = useFetch('/realtime/update', {
params: { start_at: data?.timestamp },
@@ -51,10 +51,11 @@ export default function RealtimeDashboard() {
const { pageviews, sessions, events } = data;
if (websiteId) {
+ const { id } = init.websites.find(n => n.id === websiteId);
return {
- pageviews: filterWebsite(pageviews, websiteId),
- sessions: filterWebsite(sessions, websiteId),
- events: filterWebsite(events, websiteId),
+ pageviews: filterWebsite(pageviews, id),
+ sessions: filterWebsite(sessions, id),
+ events: filterWebsite(events, id),
};
}
}
@@ -122,12 +123,7 @@ export default function RealtimeDashboard() {
onSelect={setWebsiteId}
/>
-
+
diff --git a/components/pages/Settings.js b/components/pages/Settings.js
index 217ad590..bc5022b9 100644
--- a/components/pages/Settings.js
+++ b/components/pages/Settings.js
@@ -4,12 +4,12 @@ import { useRouter } from 'next/router';
import Page from 'components/layout/Page';
import MenuLayout from 'components/layout/MenuLayout';
import WebsiteSettings from 'components/settings/WebsiteSettings';
-import AccountSettings from 'components/settings/AccountSettings';
+import UserSettings from 'components/settings/UserSettings';
import ProfileSettings from 'components/settings/ProfileSettings';
import useUser from 'hooks/useUser';
const WEBSITES = '/settings';
-const ACCOUNTS = '/settings/accounts';
+const ACCOUNTS = '/settings/users';
const PROFILE = '/settings/profile';
export default function Settings() {
@@ -28,9 +28,9 @@ export default function Settings() {
value: WEBSITES,
},
{
- label: ,
+ label: ,
value: ACCOUNTS,
- hidden: !user?.is_admin,
+ hidden: !user?.isAdmin,
},
{
label: ,
@@ -42,7 +42,7 @@ export default function Settings() {
{pathname === WEBSITES && }
- {pathname === ACCOUNTS && }
+ {pathname === ACCOUNTS && }
{pathname === PROFILE && }
diff --git a/components/pages/TestConsole.js b/components/pages/TestConsole.js
index efeb0264..c505030c 100644
--- a/components/pages/TestConsole.js
+++ b/components/pages/TestConsole.js
@@ -1,4 +1,4 @@
-import classNames from 'classnames';
+import { Row, Column } from 'react-basics';
import Head from 'next/head';
import Link from 'next/link';
import { useRouter } from 'next/router';
@@ -12,7 +12,7 @@ import useFetch from 'hooks/useFetch';
import styles from './TestConsole.module.css';
export default function TestConsole() {
- const { data } = useFetch('/websites');
+ const { data } = useFetch('/websites?include_all=true');
const router = useRouter();
const {
basePath,
@@ -24,9 +24,9 @@ export default function TestConsole() {
return null;
}
- const options = data.map(({ name, website_id }) => ({ label: name, value: website_id }));
- const website = data.find(({ website_id }) => website_id === +websiteId);
- const selectedValue = options.find(({ value }) => value === website?.website_id)?.value;
+ const options = data.map(({ name, id }) => ({ label: name, value: id }));
+ const website = data.find(({ id }) => websiteId === id);
+ const selectedValue = options.find(({ value }) => value === website?.id)?.value;
function handleSelect(value) {
router.push(`/console/${value}`);
@@ -46,7 +46,7 @@ export default function TestConsole() {
@@ -62,8 +62,8 @@ export default function TestConsole() {
{website && (
<>
-
-
+
+
Page links
@@ -87,32 +87,32 @@ export default function TestConsole() {
-
-
+
+
CSS events
-
-
+
+
Javascript events
-
-
-
+
+
+
>
)}
diff --git a/components/pages/TestConsole.module.css b/components/pages/TestConsole.module.css
index 690904b6..5ff8b96a 100644
--- a/components/pages/TestConsole.module.css
+++ b/components/pages/TestConsole.module.css
@@ -1,5 +1,5 @@
.test {
- border: 1px solid var(--gray200);
+ border: 1px solid var(--base200);
border-radius: 5px;
padding: 0 20px 20px 20px;
}
diff --git a/components/pages/WebsiteDetails.js b/components/pages/WebsiteDetails.js
index 3fc234a4..46c9bcab 100644
--- a/components/pages/WebsiteDetails.js
+++ b/components/pages/WebsiteDetails.js
@@ -1,28 +1,30 @@
-import React, { useState } from 'react';
-import { defineMessages, FormattedMessage, useIntl } from 'react-intl';
+import Arrow from 'assets/arrow-right.svg';
import classNames from 'classnames';
-import WebsiteChart from 'components/metrics/WebsiteChart';
-import WorldMap from 'components/common/WorldMap';
-import Page from 'components/layout/Page';
-import GridLayout, { GridRow, GridColumn } from 'components/layout/GridLayout';
-import MenuLayout from 'components/layout/MenuLayout';
+import EventDataButton from 'components/common/EventDataButton';
import Link from 'components/common/Link';
import Loading from 'components/common/Loading';
-import Arrow from 'assets/arrow-right.svg';
-import PagesTable from 'components/metrics/PagesTable';
-import ReferrersTable from 'components/metrics/ReferrersTable';
+import WorldMap from 'components/common/WorldMap';
+import GridRow from 'components/layout/GridRow';
+import MenuLayout from 'components/layout/MenuLayout';
+import Page from 'components/layout/Page';
import BrowsersTable from 'components/metrics/BrowsersTable';
-import OSTable from 'components/metrics/OSTable';
-import DevicesTable from 'components/metrics/DevicesTable';
import CountriesTable from 'components/metrics/CountriesTable';
-import LanguagesTable from 'components/metrics/LanguagesTable';
-import EventsTable from 'components/metrics/EventsTable';
+import DevicesTable from 'components/metrics/DevicesTable';
import EventsChart from 'components/metrics/EventsChart';
-import ScreenTable from 'components/metrics/ScreenTable';
+import EventsTable from 'components/metrics/EventsTable';
+import LanguagesTable from 'components/metrics/LanguagesTable';
+import OSTable from 'components/metrics/OSTable';
+import PagesTable from 'components/metrics/PagesTable';
import QueryParametersTable from 'components/metrics/QueryParametersTable';
+import ReferrersTable from 'components/metrics/ReferrersTable';
+import ScreenTable from 'components/metrics/ScreenTable';
+import WebsiteChart from 'components/metrics/WebsiteChart';
import useFetch from 'hooks/useFetch';
import usePageQuery from 'hooks/usePageQuery';
import { DEFAULT_ANIMATION_DURATION } from 'lib/constants';
+import { useState } from 'react';
+import { Column } from 'react-basics';
+import { FormattedMessage, defineMessages, useIntl } from 'react-intl';
import styles from './WebsiteDetails.module.css';
const messages = defineMessages({
@@ -64,7 +66,7 @@ export default function WebsiteDetails({ websiteId }) {
const BackButton = () => (
- } size="small">
+ } sizes="small">
@@ -136,57 +138,54 @@ export default function WebsiteDetails({ websiteId }) {
return (
-
-
-
- {!chartLoaded && }
-
-
+
+ {!chartLoaded && }
{chartLoaded && !view && (
-
+ <>
-
+
-
-
+
+
-
+
-
+
-
-
+
+
-
-
+
+
-
+
-
+
-
-
+
+
-
+
0 })}>
-
+
-
-
+
+
+
-
+
-
+ >
)}
{view && chartLoaded && (
websites
- .map(website => ({ ...website, order: websiteOrder.indexOf(website.website_id) || 0 }))
+ .map(website => ({ ...website, order: websiteOrder.indexOf(website.id) || 0 }))
.sort(firstBy('order')),
[websites, websiteOrder],
);
@@ -46,11 +46,11 @@ export default function WebsiteList({ websites, showCharts, limit }) {
return (
- {ordered.map(({ website_id, name, domain }, index) =>
+ {ordered.map(({ id, name, domain }, index) =>
index < limit ? (
-
+
@@ -79,7 +79,7 @@ export default function ProfileSettings() {
title={}
>
setChangePassword(false)}
/>
diff --git a/components/settings/SettingsButton.js b/components/settings/SettingsButton.js
new file mode 100644
index 00000000..3799a3de
--- /dev/null
+++ b/components/settings/SettingsButton.js
@@ -0,0 +1,45 @@
+import React, { useRef, useState } from 'react';
+import { FormattedMessage } from 'react-intl';
+import TimezoneSetting from './TimezoneSetting';
+import DateRangeSetting from './DateRangeSetting';
+import Button from 'components/common/Button';
+import styles from './SettingsButton.module.css';
+import Gear from 'assets/gear.svg';
+import useDocumentClick from '../../hooks/useDocumentClick';
+
+export default function SettingsButton() {
+ const [show, setShow] = useState(false);
+ const ref = useRef();
+
+ function handleClick() {
+ setShow(state => !state);
+ }
+
+ useDocumentClick(e => {
+ if (!ref.current?.contains(e.target)) {
+ setShow(false);
+ }
+ });
+
+ return (
+
+
} variant="light" onClick={handleClick} />
+ {show && (
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ )}
+
+ );
+}
diff --git a/components/settings/SettingsButton.module.css b/components/settings/SettingsButton.module.css
new file mode 100644
index 00000000..57084735
--- /dev/null
+++ b/components/settings/SettingsButton.module.css
@@ -0,0 +1,20 @@
+.button {
+ position: relative;
+}
+
+.panel {
+ background: var(--base50);
+ border: 1px solid var(--base500);
+ border-radius: 4px;
+ display: flex;
+ flex-direction: column;
+ position: absolute;
+ top: 100%;
+ right: 0;
+ padding: 20px;
+ z-index: 100;
+}
+
+.panel dd {
+ display: flex;
+}
diff --git a/components/settings/UserButton.js b/components/settings/UserButton.js
index 8e0ee350..1d002c4b 100644
--- a/components/settings/UserButton.js
+++ b/components/settings/UserButton.js
@@ -8,10 +8,12 @@ import User from 'assets/user.svg';
import styles from './UserButton.module.css';
import { AUTH_TOKEN } from 'lib/constants';
import useUser from 'hooks/useUser';
+import useConfig from 'hooks/useConfig';
export default function UserButton() {
const { user } = useUser();
const router = useRouter();
+ const { adminDisabled } = useConfig();
const menuOptions = [
{
@@ -25,7 +27,11 @@ export default function UserButton() {
value: 'username',
className: styles.username,
},
- { label: , value: 'profile' },
+ {
+ label: ,
+ value: 'profile',
+ hidden: adminDisabled,
+ },
{ label: , value: 'logout' },
];
diff --git a/components/settings/UserButton.module.css b/components/settings/UserButton.module.css
index dbb616ff..a0c3e235 100644
--- a/components/settings/UserButton.module.css
+++ b/components/settings/UserButton.module.css
@@ -1,7 +1,7 @@
.username {
- border-bottom: 1px solid var(--gray500);
+ border-bottom: 1px solid var(--base500);
}
.username:hover {
- background: var(--gray50);
+ background: var(--base50);
}
diff --git a/components/settings/AccountSettings.js b/components/settings/UserSettings.js
similarity index 62%
rename from components/settings/AccountSettings.js
rename to components/settings/UserSettings.js
index 967492db..1fd5d0c5 100644
--- a/components/settings/AccountSettings.js
+++ b/components/settings/UserSettings.js
@@ -8,7 +8,7 @@ import Icon from 'components/common/Icon';
import Table from 'components/common/Table';
import Modal from 'components/common/Modal';
import Toast from 'components/common/Toast';
-import AccountEditForm from 'components/forms/AccountEditForm';
+import UserEditForm from 'components/forms/UserEditForm';
import ButtonLayout from 'components/layout/ButtonLayout';
import DeleteForm from 'components/forms/DeleteForm';
import useFetch from 'hooks/useFetch';
@@ -17,33 +17,35 @@ import Plus from 'assets/plus.svg';
import Trash from 'assets/trash.svg';
import Check from 'assets/check.svg';
import LinkIcon from 'assets/external-link.svg';
-import styles from './AccountSettings.module.css';
+import styles from './UserSettings.module.css';
-export default function AccountSettings() {
- const [addAccount, setAddAccount] = useState();
- const [editAccount, setEditAccount] = useState();
- const [deleteAccount, setDeleteAccount] = useState();
+export default function UserSettings() {
+ const [addUser, setAddUser] = useState();
+ const [editUser, setEditUser] = useState();
+ const [deleteUser, setDeleteUser] = useState();
const [saved, setSaved] = useState(0);
const [message, setMessage] = useState();
- const { data } = useFetch(`/accounts`, {}, [saved]);
+ const { data } = useFetch(`/users`, {}, [saved]);
- const Checkmark = ({ is_admin }) => (is_admin ? } size="medium" /> : null);
+ const Checkmark = ({ isAdmin }) => (isAdmin ? } size="medium" /> : null);
- const DashboardLink = row => (
-
-
- } />
-
-
- );
+ const DashboardLink = row => {
+ return (
+
+
+ } />
+
+
+ );
+ };
const Buttons = row => (
- } size="small" onClick={() => setEditAccount(row)}>
+ } size="small" onClick={() => setEditUser(row)}>
- {!row.is_admin && (
- } size="small" onClick={() => setDeleteAccount(row)}>
+ {!row.isAdmin && (
+ } size="small" onClick={() => setDeleteUser(row)}>
)}
@@ -57,7 +59,7 @@ export default function AccountSettings() {
className: 'col-12 col-lg-4',
},
{
- key: 'is_admin',
+ key: 'isAdmin',
label: ,
className: 'col-12 col-lg-3',
render: Checkmark,
@@ -82,9 +84,9 @@ export default function AccountSettings() {
}
function handleClose() {
- setEditAccount(null);
- setAddAccount(null);
- setDeleteAccount(null);
+ setEditUser(null);
+ setAddUser(null);
+ setDeleteUser(null);
}
if (!data) {
@@ -95,33 +97,31 @@ export default function AccountSettings() {
<>
-
+
- } size="small" onClick={() => setAddAccount(true)}>
-
+ } size="small" onClick={() => setAddUser(true)}>
+
- {editAccount && (
- }>
- }>
+
)}
- {addAccount && (
- }>
-
+ {addUser && (
+ }>
+
)}
- {deleteAccount && (
- }
- >
+ {deleteUser && (
+ }>
diff --git a/components/settings/AccountSettings.module.css b/components/settings/UserSettings.module.css
similarity index 100%
rename from components/settings/AccountSettings.module.css
rename to components/settings/UserSettings.module.css
diff --git a/components/settings/WebsiteSettings.js b/components/settings/WebsiteSettings.js
index 49bd005f..0b428527 100644
--- a/components/settings/WebsiteSettings.js
+++ b/components/settings/WebsiteSettings.js
@@ -37,16 +37,16 @@ export default function WebsiteSettings() {
const [saved, setSaved] = useState(0);
const [message, setMessage] = useState();
- const { data } = useFetch('/websites', { params: { include_all: !!user?.is_admin } }, [saved]);
+ const { data } = useFetch('/websites', { params: { include_all: !!user?.isAdmin } }, [saved]);
const Buttons = row => (
- {row.share_id && (
+ {row.shareId && (
}
size="small"
tooltip={}
- tooltipId={`button-share-${row.website_id}`}
+ tooltipId={`button-share-${row.id}`}
onClick={() => setShowUrl(row)}
/>
)}
@@ -56,46 +56,42 @@ export default function WebsiteSettings() {
tooltip={
}
- tooltipId={`button-code-${row.website_id}`}
+ tooltipId={`button-code-${row.id}`}
onClick={() => setShowCode(row)}
/>
}
size="small"
tooltip={}
- tooltipId={`button-edit-${row.website_id}`}
+ tooltipId={`button-edit-${row.id}`}
onClick={() => setEditWebsite(row)}
/>
}
size="small"
tooltip={}
- tooltipId={`button-reset-${row.website_id}`}
+ tooltipId={`button-reset-${row.id}`}
onClick={() => setResetWebsite(row)}
/>
}
size="small"
tooltip={}
- tooltipId={`button-delete-${row.website_id}`}
+ tooltipId={`button-delete-${row.id}`}
onClick={() => setDeleteWebsite(row)}
/>
);
- const DetailsLink = ({ website_id, name, domain }) => (
-
+ const DetailsLink = ({ id, name, domain }) => (
+
- {name}
+ {name}
);
- const Domain = ({ domain, website_id }) => (
- {domain}
+ const Domain = ({ domain, id }) => (
+ {domain}
);
const adminColumns = [
@@ -112,7 +108,7 @@ export default function WebsiteSettings() {
render: Domain,
},
{
- key: 'account',
+ key: 'user',
label: ,
className: 'col-12 col-lg-4 col-xl-1',
},
@@ -187,7 +183,7 @@ export default function WebsiteSettings() {
-
+
{editWebsite && (
}>
@@ -203,7 +199,7 @@ export default function WebsiteSettings() {
title={}
>
@@ -214,7 +210,7 @@ export default function WebsiteSettings() {
title={}
>
diff --git a/db/clickhouse/schema.sql b/db/clickhouse/schema.sql
index 6bcf899c..209e6d5e 100644
--- a/db/clickhouse/schema.sql
+++ b/db/clickhouse/schema.sql
@@ -3,9 +3,10 @@ SET allow_experimental_object_type = 1;
-- Create Event
CREATE TABLE event
(
- website_id UInt32,
- session_uuid UUID,
- event_uuid Nullable(UUID),
+ website_id UUID,
+ session_id UUID,
+ event_id Nullable(UUID),
+ rev_id UInt32,
--session
hostname LowCardinality(String),
browser LowCardinality(String),
@@ -18,18 +19,20 @@ CREATE TABLE event
url String,
referrer String,
--event
+ event_type UInt32,
event_name String,
event_data JSON,
created_at DateTime('UTC')
)
engine = MergeTree
- ORDER BY (website_id, session_uuid, created_at)
+ ORDER BY (website_id, session_id, created_at)
SETTINGS index_granularity = 8192;
CREATE TABLE event_queue (
- website_id UInt32,
- session_uuid UUID,
- event_uuid Nullable(UUID),
+ website_id UUID,
+ session_id UUID,
+ event_id Nullable(UUID),
+ rev_id UInt32,
url String,
referrer String,
hostname LowCardinality(String),
@@ -39,6 +42,7 @@ CREATE TABLE event_queue (
screen LowCardinality(String),
language LowCardinality(String),
country LowCardinality(String),
+ event_type UInt32,
event_name String,
event_data String,
created_at DateTime('UTC')
@@ -53,8 +57,9 @@ SETTINGS kafka_broker_list = 'domain:9092,domain:9093,domain:9094', -- input bro
CREATE MATERIALIZED VIEW event_queue_mv TO event AS
SELECT website_id,
- session_uuid,
- event_uuid,
+ session_id,
+ event_id,
+ rev_id,
url,
referrer,
hostname,
@@ -64,7 +69,8 @@ SELECT website_id,
screen,
language,
country,
+ event_type,
event_name,
- event_data,
+ if((empty(event_data) = 0) AND startsWith(event_data, '"'), concat('{', event_data, ': true}'), event_data) AS event_data,
created_at
FROM event_queue;
\ No newline at end of file
diff --git a/db/mysql/migrations/04_account_uuid/migration.sql b/db/mysql/migrations/04_account_uuid/migration.sql
deleted file mode 100644
index 7b7b5dea..00000000
--- a/db/mysql/migrations/04_account_uuid/migration.sql
+++ /dev/null
@@ -1,11 +0,0 @@
--- AlterTable
-ALTER TABLE `account` ADD COLUMN `account_uuid` VARCHAR(36);
-
--- Backfill UUID
-UPDATE `account` SET account_uuid=(SELECT uuid());
-
--- AlterTable
-ALTER TABLE `account` MODIFY `account_uuid` VARCHAR(36) NOT NULL;
-
--- CreateIndex
-CREATE UNIQUE INDEX `account_account_uuid_key` ON `account`(`account_uuid`);
diff --git a/db/mysql/migrations/04_add_uuid/migration.sql b/db/mysql/migrations/04_add_uuid/migration.sql
new file mode 100644
index 00000000..137ee2e3
--- /dev/null
+++ b/db/mysql/migrations/04_add_uuid/migration.sql
@@ -0,0 +1,35 @@
+-- AlterTable
+ALTER TABLE `account` ADD COLUMN `account_uuid` VARCHAR(36);
+
+-- Backfill UUID
+UPDATE `account` SET account_uuid=(SELECT uuid());
+
+-- AlterTable
+ALTER TABLE `account` MODIFY `account_uuid` VARCHAR(36) NOT NULL;
+
+-- CreateIndex
+CREATE UNIQUE INDEX `account_account_uuid_key` ON `account`(`account_uuid`);
+
+-- AlterTable
+ALTER TABLE `event` ADD COLUMN `event_uuid` VARCHAR(36);
+
+-- Backfill UUID
+UPDATE `event` SET event_uuid=(SELECT uuid());
+
+-- AlterTable
+ALTER TABLE `event` MODIFY `event_uuid` VARCHAR(36) NOT NULL;
+
+-- CreateIndex
+CREATE UNIQUE INDEX `event_event_uuid_key` ON `event`(`event_uuid`);
+
+-- CreateIndex
+CREATE INDEX `account_account_uuid_idx` ON `account`(`account_uuid`);
+
+-- CreateIndex
+CREATE INDEX `session_session_uuid_idx` ON `session`(`session_uuid`);
+
+-- CreateIndex
+CREATE INDEX `website_website_uuid_idx` ON `website`(`website_uuid`);
+
+-- CreateIndex
+CREATE INDEX `event_event_uuid_idx` ON `event`(`event_uuid`);
\ No newline at end of file
diff --git a/db/mysql/schema.prisma b/db/mysql/schema.prisma
index bfc2c20b..bdfafd43 100644
--- a/db/mysql/schema.prisma
+++ b/db/mysql/schema.prisma
@@ -8,88 +8,96 @@ datasource db {
}
model account {
- user_id Int @id @default(autoincrement()) @db.UnsignedInt
- username String @unique() @db.VarChar(255)
- password String @db.VarChar(60)
- is_admin Boolean @default(false)
- created_at DateTime? @default(now()) @db.Timestamp(0)
- updated_at DateTime? @default(now()) @db.Timestamp(0)
- account_uuid String @unique() @db.VarChar(36)
- website website[]
+ id Int @id @default(autoincrement()) @map("user_id") @db.UnsignedInt
+ username String @unique() @db.VarChar(255)
+ password String @db.VarChar(60)
+ isAdmin Boolean @default(false) @map("is_admin")
+ createdAt DateTime? @default(now()) @map("created_at") @db.Timestamp(0)
+ updatedAt DateTime? @default(now()) @map("updated_at") @db.Timestamp(0)
+ accountUuid String @unique() @map("account_uuid") @db.VarChar(36)
+ website website[]
+
+ @@index([accountUuid])
}
model event {
- event_id Int @id @default(autoincrement()) @db.UnsignedInt
- website_id Int @db.UnsignedInt
- session_id Int @db.UnsignedInt
- created_at DateTime? @default(now()) @db.Timestamp(0)
- url String @db.VarChar(500)
- event_name String @db.VarChar(50)
- session session @relation(fields: [session_id], references: [session_id])
- website website @relation(fields: [website_id], references: [website_id])
- event_data event_data?
+ id Int @id @default(autoincrement()) @map("event_id") @db.UnsignedInt
+ websiteId Int @map("website_id") @db.UnsignedInt
+ sessionId Int @map("session_id") @db.UnsignedInt
+ createdAt DateTime? @default(now()) @map("created_at") @db.Timestamp(0)
+ url String @db.VarChar(500)
+ eventName String @map("event_name") @db.VarChar(50)
+ eventUuid String @unique() @map("event_uuid") @db.VarChar(36)
+ session session @relation(fields: [sessionId], references: [id])
+ website website @relation(fields: [websiteId], references: [id])
+ eventData eventData?
- @@index([created_at])
- @@index([session_id])
- @@index([website_id])
+ @@index([createdAt])
+ @@index([sessionId])
+ @@index([websiteId])
+ @@index([eventUuid])
}
-model event_data {
- event_data_id Int @id @default(autoincrement()) @db.UnsignedInt
- event_id Int @unique @db.UnsignedInt
- event_data Json
- event event @relation(fields: [event_id], references: [event_id])
+model eventData {
+ id Int @id @default(autoincrement()) @map("event_data_id") @db.UnsignedInt
+ eventId Int @unique @map("event_id") @db.UnsignedInt
+ eventData Json @map("event_data")
+ event event @relation(fields: [eventId], references: [id])
+
+ @@map("event_data")
}
model pageview {
- view_id Int @id @default(autoincrement()) @db.UnsignedInt
- website_id Int @db.UnsignedInt
- session_id Int @db.UnsignedInt
- created_at DateTime? @default(now()) @db.Timestamp(0)
- url String @db.VarChar(500)
- referrer String? @db.VarChar(500)
- session session @relation(fields: [session_id], references: [session_id])
- website website @relation(fields: [website_id], references: [website_id])
+ id Int @id @default(autoincrement()) @map("view_id") @db.UnsignedInt
+ websiteId Int @map("website_id") @db.UnsignedInt
+ sessionId Int @map("session_id") @db.UnsignedInt
+ createdAt DateTime? @default(now()) @map("created_at") @db.Timestamp(0)
+ url String @db.VarChar(500)
+ referrer String? @db.VarChar(500)
+ session session @relation(fields: [sessionId], references: [id])
+ website website @relation(fields: [websiteId], references: [id])
- @@index([created_at])
- @@index([session_id])
- @@index([website_id, created_at])
- @@index([website_id])
- @@index([website_id, session_id, created_at])
+ @@index([createdAt])
+ @@index([sessionId])
+ @@index([websiteId, createdAt])
+ @@index([websiteId])
+ @@index([websiteId, sessionId, createdAt])
}
model session {
- session_id Int @id @default(autoincrement()) @db.UnsignedInt
- session_uuid String @unique() @db.VarChar(36)
- website_id Int @db.UnsignedInt
- created_at DateTime? @default(now()) @db.Timestamp(0)
- hostname String? @db.VarChar(100)
- browser String? @db.VarChar(20)
- os String? @db.VarChar(20)
- device String? @db.VarChar(20)
- screen String? @db.VarChar(11)
- language String? @db.VarChar(35)
- country String? @db.Char(2)
- website website @relation(fields: [website_id], references: [website_id])
- event event[]
- pageview pageview[]
+ id Int @id @default(autoincrement()) @map("session_id") @db.UnsignedInt
+ sessionUuid String @unique() @map("session_uuid") @db.VarChar(36)
+ websiteId Int @map("website_id") @db.UnsignedInt
+ createdAt DateTime? @default(now()) @map("created_at") @db.Timestamp(0)
+ hostname String? @db.VarChar(100)
+ browser String? @db.VarChar(20)
+ os String? @db.VarChar(20)
+ device String? @db.VarChar(20)
+ screen String? @db.VarChar(11)
+ language String? @db.VarChar(35)
+ country String? @db.Char(2)
+ website website @relation(fields: [websiteId], references: [id])
+ event event[]
+ pageview pageview[]
- @@index([created_at])
- @@index([website_id])
+ @@index([createdAt])
+ @@index([websiteId])
+ @@index([sessionUuid])
}
model website {
- website_id Int @id @default(autoincrement()) @db.UnsignedInt
- website_uuid String @unique() @db.VarChar(36)
- user_id Int @db.UnsignedInt
- name String @db.VarChar(100)
- domain String? @db.VarChar(500)
- share_id String? @unique() @db.VarChar(64)
- created_at DateTime? @default(now()) @db.Timestamp(0)
- account account @relation(fields: [user_id], references: [user_id])
- event event[]
- pageview pageview[]
- session session[]
+ id Int @id @default(autoincrement()) @map("website_id") @db.UnsignedInt
+ websiteUuid String @unique() @map("website_uuid") @db.VarChar(36)
+ userId Int @map("user_id") @db.UnsignedInt
+ name String @db.VarChar(100)
+ domain String? @db.VarChar(500)
+ shareId String? @unique() @map("share_id") @db.VarChar(64)
+ createdAt DateTime? @default(now()) @map("created_at") @db.Timestamp(0)
+ account account @relation(fields: [userId], references: [id])
+ event event[]
+ pageview pageview[]
+ session session[]
- @@index([user_id])
+ @@index([userId])
+ @@index([websiteUuid])
}
diff --git a/db/postgresql/migrations/01_init/migration.sql b/db/postgresql/migrations/01_init/migration.sql
index cdabcd17..dc46c0c4 100644
--- a/db/postgresql/migrations/01_init/migration.sql
+++ b/db/postgresql/migrations/01_init/migration.sql
@@ -1,46 +1,20 @@
-- CreateTable
-CREATE TABLE "account" (
- "user_id" SERIAL NOT NULL,
+CREATE TABLE "user" (
+ "user_id" UUID NOT NULL,
"username" VARCHAR(255) NOT NULL,
"password" VARCHAR(60) NOT NULL,
- "is_admin" BOOLEAN NOT NULL DEFAULT false,
+ "role" VARCHAR(50) NOT NULL,
"created_at" TIMESTAMPTZ(6) DEFAULT CURRENT_TIMESTAMP,
- "updated_at" TIMESTAMPTZ(6) DEFAULT CURRENT_TIMESTAMP,
+ "updated_at" TIMESTAMPTZ(6),
+ "deleted_at" TIMESTAMPTZ(6),
- PRIMARY KEY ("user_id")
-);
-
--- CreateTable
-CREATE TABLE "event" (
- "event_id" SERIAL NOT NULL,
- "website_id" INTEGER NOT NULL,
- "session_id" INTEGER NOT NULL,
- "created_at" TIMESTAMPTZ(6) DEFAULT CURRENT_TIMESTAMP,
- "url" VARCHAR(500) NOT NULL,
- "event_type" VARCHAR(50) NOT NULL,
- "event_value" VARCHAR(50) NOT NULL,
-
- PRIMARY KEY ("event_id")
-);
-
--- CreateTable
-CREATE TABLE "pageview" (
- "view_id" SERIAL NOT NULL,
- "website_id" INTEGER NOT NULL,
- "session_id" INTEGER NOT NULL,
- "created_at" TIMESTAMPTZ(6) DEFAULT CURRENT_TIMESTAMP,
- "url" VARCHAR(500) NOT NULL,
- "referrer" VARCHAR(500),
-
- PRIMARY KEY ("view_id")
+ CONSTRAINT "user_pkey" PRIMARY KEY ("user_id")
);
-- CreateTable
CREATE TABLE "session" (
- "session_id" SERIAL NOT NULL,
- "session_uuid" UUID NOT NULL,
- "website_id" INTEGER NOT NULL,
- "created_at" TIMESTAMPTZ(6) DEFAULT CURRENT_TIMESTAMP,
+ "session_id" UUID NOT NULL,
+ "website_id" UUID NOT NULL,
"hostname" VARCHAR(100),
"browser" VARCHAR(20),
"os" VARCHAR(20),
@@ -48,52 +22,75 @@ CREATE TABLE "session" (
"screen" VARCHAR(11),
"language" VARCHAR(35),
"country" CHAR(2),
+ "created_at" TIMESTAMPTZ(6) DEFAULT CURRENT_TIMESTAMP,
- PRIMARY KEY ("session_id")
+ CONSTRAINT "session_pkey" PRIMARY KEY ("session_id")
);
-- CreateTable
CREATE TABLE "website" (
- "website_id" SERIAL NOT NULL,
- "website_uuid" UUID NOT NULL,
- "user_id" INTEGER NOT NULL,
+ "website_id" UUID NOT NULL,
"name" VARCHAR(100) NOT NULL,
"domain" VARCHAR(500),
"share_id" VARCHAR(64),
+ "rev_id" INTEGER NOT NULL DEFAULT 0,
+ "user_id" UUID,
+ "team_id" UUID,
"created_at" TIMESTAMPTZ(6) DEFAULT CURRENT_TIMESTAMP,
+ "updated_at" TIMESTAMPTZ(6),
+ "deleted_at" TIMESTAMPTZ(6),
- PRIMARY KEY ("website_id")
+ CONSTRAINT "website_pkey" PRIMARY KEY ("website_id")
+);
+
+-- CreateTable
+CREATE TABLE "website_event" (
+ "event_id" UUID NOT NULL,
+ "website_id" UUID NOT NULL,
+ "session_id" UUID NOT NULL,
+ "created_at" TIMESTAMPTZ(6) DEFAULT CURRENT_TIMESTAMP,
+ "url" VARCHAR(500) NOT NULL,
+ "referrer" VARCHAR(500),
+ "event_type" INTEGER NOT NULL DEFAULT 1,
+ "event_name" VARCHAR(50),
+ "event_data" JSONB,
+
+ CONSTRAINT "website_event_pkey" PRIMARY KEY ("event_id")
+);
+
+-- CreateTable
+CREATE TABLE "team" (
+ "team_id" UUID NOT NULL,
+ "name" VARCHAR(50) NOT NULL,
+ "user_id" UUID NOT NULL,
+ "created_at" TIMESTAMPTZ(6) DEFAULT CURRENT_TIMESTAMP,
+ "updated_at" TIMESTAMPTZ(6),
+ "deleted_at" TIMESTAMPTZ(6),
+
+ CONSTRAINT "team_pkey" PRIMARY KEY ("team_id")
+);
+
+-- CreateTable
+CREATE TABLE "team_user" (
+ "team_user_id" UUID NOT NULL,
+ "team_id" UUID NOT NULL,
+ "user_id" UUID NOT NULL,
+ "role" VARCHAR(50) NOT NULL,
+ "created_at" TIMESTAMPTZ(6) DEFAULT CURRENT_TIMESTAMP,
+ "updated_at" TIMESTAMPTZ(6),
+ "deleted_at" TIMESTAMPTZ(6),
+
+ CONSTRAINT "team_user_pkey" PRIMARY KEY ("team_user_id")
);
-- CreateIndex
-CREATE UNIQUE INDEX "account.username_unique" ON "account"("username");
+CREATE UNIQUE INDEX "user_user_id_key" ON "user"("user_id");
-- CreateIndex
-CREATE INDEX "event_created_at_idx" ON "event"("created_at");
+CREATE UNIQUE INDEX "user_username_key" ON "user"("username");
-- CreateIndex
-CREATE INDEX "event_session_id_idx" ON "event"("session_id");
-
--- CreateIndex
-CREATE INDEX "event_website_id_idx" ON "event"("website_id");
-
--- CreateIndex
-CREATE INDEX "pageview_created_at_idx" ON "pageview"("created_at");
-
--- CreateIndex
-CREATE INDEX "pageview_session_id_idx" ON "pageview"("session_id");
-
--- CreateIndex
-CREATE INDEX "pageview_website_id_created_at_idx" ON "pageview"("website_id", "created_at");
-
--- CreateIndex
-CREATE INDEX "pageview_website_id_idx" ON "pageview"("website_id");
-
--- CreateIndex
-CREATE INDEX "pageview_website_id_session_id_created_at_idx" ON "pageview"("website_id", "session_id", "created_at");
-
--- CreateIndex
-CREATE UNIQUE INDEX "session.session_uuid_unique" ON "session"("session_uuid");
+CREATE UNIQUE INDEX "session_session_id_key" ON "session"("session_id");
-- CreateIndex
CREATE INDEX "session_created_at_idx" ON "session"("created_at");
@@ -102,31 +99,49 @@ CREATE INDEX "session_created_at_idx" ON "session"("created_at");
CREATE INDEX "session_website_id_idx" ON "session"("website_id");
-- CreateIndex
-CREATE UNIQUE INDEX "website.website_uuid_unique" ON "website"("website_uuid");
+CREATE UNIQUE INDEX "website_website_id_key" ON "website"("website_id");
-- CreateIndex
-CREATE UNIQUE INDEX "website.share_id_unique" ON "website"("share_id");
+CREATE UNIQUE INDEX "website_share_id_key" ON "website"("share_id");
-- CreateIndex
-CREATE INDEX "website_user_id_idx" ON "website"("user_id");
+CREATE INDEX "website_created_at_idx" ON "website"("created_at");
+
+-- CreateIndex
+CREATE INDEX "website_share_id_idx" ON "website"("share_id");
+
+-- CreateIndex
+CREATE INDEX "website_event_created_at_idx" ON "website_event"("created_at");
+
+-- CreateIndex
+CREATE INDEX "website_event_session_id_idx" ON "website_event"("session_id");
+
+-- CreateIndex
+CREATE INDEX "website_event_website_id_idx" ON "website_event"("website_id");
+
+-- CreateIndex
+CREATE INDEX "website_event_website_id_created_at_idx" ON "website_event"("website_id", "created_at");
+
+-- CreateIndex
+CREATE INDEX "website_event_website_id_session_id_created_at_idx" ON "website_event"("website_id", "session_id", "created_at");
+
+-- CreateIndex
+CREATE UNIQUE INDEX "team_team_id_key" ON "team"("team_id");
+
+-- CreateIndex
+CREATE UNIQUE INDEX "team_user_team_user_id_key" ON "team_user"("team_user_id");
-- AddForeignKey
-ALTER TABLE "event" ADD FOREIGN KEY ("session_id") REFERENCES "session"("session_id") ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE "website" ADD CONSTRAINT "website_team_id_fkey" FOREIGN KEY ("team_id") REFERENCES "team"("team_id") ON DELETE SET NULL ON UPDATE CASCADE;
-- AddForeignKey
-ALTER TABLE "event" ADD FOREIGN KEY ("website_id") REFERENCES "website"("website_id") ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE "website" ADD CONSTRAINT "website_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "user"("user_id") ON DELETE SET NULL ON UPDATE CASCADE;
-- AddForeignKey
-ALTER TABLE "pageview" ADD FOREIGN KEY ("session_id") REFERENCES "session"("session_id") ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE "team_user" ADD CONSTRAINT "team_user_team_id_fkey" FOREIGN KEY ("team_id") REFERENCES "team"("team_id") ON DELETE RESTRICT ON UPDATE CASCADE;
-- AddForeignKey
-ALTER TABLE "pageview" ADD FOREIGN KEY ("website_id") REFERENCES "website"("website_id") ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE "team_user" ADD CONSTRAINT "team_user_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "user"("user_id") ON DELETE RESTRICT ON UPDATE CASCADE;
--- AddForeignKey
-ALTER TABLE "session" ADD FOREIGN KEY ("website_id") REFERENCES "website"("website_id") ON DELETE CASCADE ON UPDATE CASCADE;
-
--- AddForeignKey
-ALTER TABLE "website" ADD FOREIGN KEY ("user_id") REFERENCES "account"("user_id") ON DELETE CASCADE ON UPDATE CASCADE;
-
--- CreateAdminUser
-INSERT INTO account (username, password, is_admin) values ('admin', '$2b$10$BUli0c.muyCW1ErNJc3jL.vFRFtFJWrT8/GcR4A.sUdCznaXiqFXa', true);
+-- AddSystemUser
+INSERT INTO "user" (user_id, username, role, password) VALUES ('41e2b680-648e-4b09-bcd7-3e2b10c06264' , 'admin', 'admin', '$2b$10$BUli0c.muyCW1ErNJc3jL.vFRFtFJWrT8/GcR4A.sUdCznaXiqFXa');
diff --git a/db/postgresql/migrations/02_add_event_data/migration.sql b/db/postgresql/migrations/02_add_event_data/migration.sql
deleted file mode 100644
index 24c22e35..00000000
--- a/db/postgresql/migrations/02_add_event_data/migration.sql
+++ /dev/null
@@ -1,66 +0,0 @@
--- DropForeignKey
-ALTER TABLE "event" DROP CONSTRAINT "event_session_id_fkey";
-ALTER TABLE "event" DROP CONSTRAINT "event_website_id_fkey";
-
--- RenameIndex
-ALTER INDEX "event_pkey" RENAME TO "event_old_pkey";
-ALTER INDEX "event_created_at_idx" RENAME TO "event_old_created_at_idx";
-ALTER INDEX "event_session_id_idx" RENAME TO "event_old_session_id_idx";
-ALTER INDEX "event_website_id_idx" RENAME TO "event_old_website_id_idx";
-
--- RenameTable
-ALTER TABLE "event" RENAME TO "_event_old";
-
--- CreateTable
-CREATE TABLE "event" (
- "event_id" SERIAL NOT NULL,
- "website_id" INTEGER NOT NULL,
- "session_id" INTEGER NOT NULL,
- "created_at" TIMESTAMPTZ(6) DEFAULT CURRENT_TIMESTAMP,
- "url" VARCHAR(500) NOT NULL,
- "event_name" VARCHAR(50) NOT NULL,
-
- PRIMARY KEY ("event_id")
-);
-
--- CreateIndex
-CREATE INDEX "event_created_at_idx" ON "event"("created_at");
-
--- CreateIndex
-CREATE INDEX "event_session_id_idx" ON "event"("session_id");
-
--- CreateIndex
-CREATE INDEX "event_website_id_idx" ON "event"("website_id");
-
--- AddForeignKey
-ALTER TABLE "event" ADD CONSTRAINT "event_session_id_fkey" FOREIGN KEY ("session_id") REFERENCES "session"("session_id") ON DELETE CASCADE ON UPDATE CASCADE;
-
--- AddForeignKey
-ALTER TABLE "event" ADD CONSTRAINT "event_website_id_fkey" FOREIGN KEY ("website_id") REFERENCES "website"("website_id") ON DELETE CASCADE ON UPDATE CASCADE;
-
--- CreateTable
-CREATE TABLE "event_data" (
- "event_data_id" SERIAL NOT NULL,
- "event_id" INTEGER NOT NULL,
- "event_data" JSONB NOT NULL,
-
- CONSTRAINT "event_data_pkey" PRIMARY KEY ("event_data_id")
-);
-
--- CreateIndex
-CREATE UNIQUE INDEX "event_data_event_id_key" ON "event_data"("event_id");
-
--- AddForeignKey
-ALTER TABLE "event_data" ADD CONSTRAINT "event_data_event_id_fkey" FOREIGN KEY ("event_id") REFERENCES "event"("event_id") ON DELETE RESTRICT ON UPDATE CASCADE;
-
--- RenameIndex
-ALTER INDEX IF EXISTS "account.username_unique" RENAME TO "account_username_key";
-
--- RenameIndex
-ALTER INDEX IF EXISTS "session.session_uuid_unique" RENAME TO "session_session_uuid_key";
-
--- RenameIndex
-ALTER INDEX IF EXISTS "website.share_id_unique" RENAME TO "website_share_id_key";
-
--- RenameIndex
-ALTER INDEX IF EXISTS "website.website_uuid_unique" RENAME TO "website_website_uuid_key";
\ No newline at end of file
diff --git a/db/postgresql/migrations/03_remove_casade_delete/migration.sql b/db/postgresql/migrations/03_remove_casade_delete/migration.sql
deleted file mode 100644
index aa1f7805..00000000
--- a/db/postgresql/migrations/03_remove_casade_delete/migration.sql
+++ /dev/null
@@ -1,35 +0,0 @@
--- DropForeignKey
-ALTER TABLE "event" DROP CONSTRAINT IF EXISTS "event_session_id_fkey";
-
--- DropForeignKey
-ALTER TABLE "event" DROP CONSTRAINT IF EXISTS "event_website_id_fkey";
-
--- DropForeignKey
-ALTER TABLE "pageview" DROP CONSTRAINT IF EXISTS "pageview_session_id_fkey";
-
--- DropForeignKey
-ALTER TABLE "pageview" DROP CONSTRAINT IF EXISTS "pageview_website_id_fkey";
-
--- DropForeignKey
-ALTER TABLE "session" DROP CONSTRAINT IF EXISTS "session_website_id_fkey";
-
--- DropForeignKey
-ALTER TABLE "website" DROP CONSTRAINT IF EXISTS "website_user_id_fkey";
-
--- AddForeignKey
-ALTER TABLE "event" ADD CONSTRAINT "event_session_id_fkey" FOREIGN KEY ("session_id") REFERENCES "session"("session_id") ON DELETE RESTRICT ON UPDATE CASCADE;
-
--- AddForeignKey
-ALTER TABLE "event" ADD CONSTRAINT "event_website_id_fkey" FOREIGN KEY ("website_id") REFERENCES "website"("website_id") ON DELETE RESTRICT ON UPDATE CASCADE;
-
--- AddForeignKey
-ALTER TABLE "pageview" ADD CONSTRAINT "pageview_session_id_fkey" FOREIGN KEY ("session_id") REFERENCES "session"("session_id") ON DELETE RESTRICT ON UPDATE CASCADE;
-
--- AddForeignKey
-ALTER TABLE "pageview" ADD CONSTRAINT "pageview_website_id_fkey" FOREIGN KEY ("website_id") REFERENCES "website"("website_id") ON DELETE RESTRICT ON UPDATE CASCADE;
-
--- AddForeignKey
-ALTER TABLE "session" ADD CONSTRAINT "session_website_id_fkey" FOREIGN KEY ("website_id") REFERENCES "website"("website_id") ON DELETE RESTRICT ON UPDATE CASCADE;
-
--- AddForeignKey
-ALTER TABLE "website" ADD CONSTRAINT "website_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "account"("user_id") ON DELETE RESTRICT ON UPDATE CASCADE;
diff --git a/db/postgresql/migrations/04_account_uuid/migration.sql b/db/postgresql/migrations/04_account_uuid/migration.sql
deleted file mode 100644
index f95718d4..00000000
--- a/db/postgresql/migrations/04_account_uuid/migration.sql
+++ /dev/null
@@ -1,12 +0,0 @@
-
--- AlterTable
-ALTER TABLE "account" ADD COLUMN "account_uuid" UUID NULL;
-
--- Backfill UUID
-UPDATE "account" SET account_uuid = gen_random_uuid();
-
--- AlterTable
-ALTER TABLE "account" ALTER COLUMN "account_uuid" SET NOT NULL;
-
--- CreateIndex
-CREATE UNIQUE INDEX "account_account_uuid_key" ON "account"("account_uuid");
diff --git a/db/postgresql/schema.prisma b/db/postgresql/schema.prisma
index d1d346de..df273edf 100644
--- a/db/postgresql/schema.prisma
+++ b/db/postgresql/schema.prisma
@@ -7,89 +7,102 @@ datasource db {
url = env("DATABASE_URL")
}
-model account {
- user_id Int @id @default(autoincrement())
- username String @unique @db.VarChar(255)
- password String @db.VarChar(60)
- is_admin Boolean @default(false)
- created_at DateTime? @default(now()) @db.Timestamptz(6)
- updated_at DateTime? @default(now()) @db.Timestamptz(6)
- account_uuid String @unique @db.Uuid
- website website[]
+model User {
+ id String @id @unique @map("user_id") @db.Uuid
+ username String @unique @db.VarChar(255)
+ password String @db.VarChar(60)
+ role String @map("role") @db.VarChar(50)
+ createdAt DateTime? @default(now()) @map("created_at") @db.Timestamptz(6)
+ updatedAt DateTime? @map("updated_at") @db.Timestamptz(6)
+ deletedAt DateTime? @map("deleted_at") @db.Timestamptz(6)
+
+ teamUser TeamUser[]
+ Website Website[]
+
+ @@map("user")
}
-model event {
- event_id Int @id @default(autoincrement())
- website_id Int
- session_id Int
- created_at DateTime? @default(now()) @db.Timestamptz(6)
- url String @db.VarChar(500)
- event_name String @db.VarChar(50)
- session session @relation(fields: [session_id], references: [session_id])
- website website @relation(fields: [website_id], references: [website_id])
- event_data event_data?
+model Session {
+ id String @id @unique @map("session_id") @db.Uuid
+ websiteId String @map("website_id") @db.Uuid
+ hostname String? @db.VarChar(100)
+ browser String? @db.VarChar(20)
+ os String? @db.VarChar(20)
+ device String? @db.VarChar(20)
+ screen String? @db.VarChar(11)
+ language String? @db.VarChar(35)
+ country String? @db.Char(2)
+ createdAt DateTime? @default(now()) @map("created_at") @db.Timestamptz(6)
- @@index([created_at])
- @@index([session_id])
- @@index([website_id])
+ @@index([createdAt])
+ @@index([websiteId])
+ @@map("session")
}
-model event_data {
- event_data_id Int @id @default(autoincrement())
- event_id Int @unique
- event_data Json
- event event @relation(fields: [event_id], references: [event_id])
+model Website {
+ id String @id @unique @map("website_id") @db.Uuid
+ name String @db.VarChar(100)
+ domain String? @db.VarChar(500)
+ shareId String? @unique @map("share_id") @db.VarChar(64)
+ revId Int @default(0) @map("rev_id") @db.Integer
+ userId String? @map("user_id") @db.Uuid
+ teamId String? @map("team_id") @db.Uuid
+ createdAt DateTime? @default(now()) @map("created_at") @db.Timestamptz(6)
+ updatedAt DateTime? @map("updated_at") @db.Timestamptz(6)
+ deletedAt DateTime? @map("deleted_at") @db.Timestamptz(6)
+
+ team Team? @relation(fields: [teamId], references: [id])
+ user User? @relation(fields: [userId], references: [id])
+
+ @@index([createdAt])
+ @@index([shareId])
+ @@map("website")
}
-model pageview {
- view_id Int @id @default(autoincrement())
- website_id Int
- session_id Int
- created_at DateTime? @default(now()) @db.Timestamptz(6)
- url String @db.VarChar(500)
- referrer String? @db.VarChar(500)
- session session @relation(fields: [session_id], references: [session_id])
- website website @relation(fields: [website_id], references: [website_id])
+model WebsiteEvent {
+ id String @id() @map("event_id") @db.Uuid
+ websiteId String @map("website_id") @db.Uuid
+ sessionId String @map("session_id") @db.Uuid
+ createdAt DateTime? @default(now()) @map("created_at") @db.Timestamptz(6)
+ url String @db.VarChar(500)
+ referrer String? @db.VarChar(500)
+ eventType Int @default(1) @map("event_type") @db.Integer
+ eventName String? @map("event_name") @db.VarChar(50)
+ eventData Json? @map("event_data")
- @@index([created_at])
- @@index([session_id])
- @@index([website_id, created_at])
- @@index([website_id])
- @@index([website_id, session_id, created_at])
+ @@index([createdAt])
+ @@index([sessionId])
+ @@index([websiteId])
+ @@index([websiteId, createdAt])
+ @@index([websiteId, sessionId, createdAt])
+ @@map("website_event")
}
-model session {
- session_id Int @id @default(autoincrement())
- session_uuid String @unique @db.Uuid
- website_id Int
- created_at DateTime? @default(now()) @db.Timestamptz(6)
- hostname String? @db.VarChar(100)
- browser String? @db.VarChar(20)
- os String? @db.VarChar(20)
- device String? @db.VarChar(20)
- screen String? @db.VarChar(11)
- language String? @db.VarChar(35)
- country String? @db.Char(2)
- website website @relation(fields: [website_id], references: [website_id])
- event event[]
- pageview pageview[]
+model Team {
+ id String @id() @unique() @map("team_id") @db.Uuid
+ name String @db.VarChar(50)
+ userId String @map("user_id") @db.Uuid
+ createdAt DateTime? @default(now()) @map("created_at") @db.Timestamptz(6)
+ updatedAt DateTime? @map("updated_at") @db.Timestamptz(6)
+ deletedAt DateTime? @map("deleted_at") @db.Timestamptz(6)
- @@index([created_at])
- @@index([website_id])
+ teamUsers TeamUser[]
+ Website Website[]
+
+ @@map("team")
}
-model website {
- website_id Int @id @default(autoincrement())
- website_uuid String @unique @db.Uuid
- user_id Int
- name String @db.VarChar(100)
- domain String? @db.VarChar(500)
- share_id String? @unique @db.VarChar(64)
- created_at DateTime? @default(now()) @db.Timestamptz(6)
- account account @relation(fields: [user_id], references: [user_id])
- event event[]
- pageview pageview[]
- session session[]
+model TeamUser {
+ id String @id() @unique() @map("team_user_id") @db.Uuid
+ teamId String @map("team_id") @db.Uuid
+ userId String @map("user_id") @db.Uuid
+ role String @map("role") @db.VarChar(50)
+ createdAt DateTime? @default(now()) @map("created_at") @db.Timestamptz(6)
+ updatedAt DateTime? @map("updated_at") @db.Timestamptz(6)
+ deletedAt DateTime? @map("deleted_at") @db.Timestamptz(6)
- @@index([user_id])
+ team Team @relation(fields: [teamId], references: [id])
+ user User @relation(fields: [userId], references: [id])
+
+ @@map("team_user")
}
diff --git a/hooks/useConfig.js b/hooks/useConfig.js
index 8adedcaf..678b6d1c 100644
--- a/hooks/useConfig.js
+++ b/hooks/useConfig.js
@@ -2,7 +2,7 @@ import { useEffect } from 'react';
import useStore, { setConfig } from 'store/app';
import useApi from 'hooks/useApi';
-let fetched = false;
+let loading = false;
export default function useConfig() {
const { config } = useStore();
@@ -10,12 +10,13 @@ export default function useConfig() {
async function loadConfig() {
const { data } = await get('/config');
+ loading = false;
setConfig(data);
}
useEffect(() => {
- if (!config && !fetched) {
- fetched = true;
+ if (!config && !loading) {
+ loading = true;
loadConfig();
}
}, []);
diff --git a/hooks/useRequireLogin.js b/hooks/useRequireLogin.js
index b00f633b..1e73f38b 100644
--- a/hooks/useRequireLogin.js
+++ b/hooks/useRequireLogin.js
@@ -19,7 +19,7 @@ export default function useRequireLogin() {
return null;
}
- setUser(data);
+ setUser(data.user);
setLoading(false);
}
diff --git a/lang/en-US.json b/lang/en-US.json
index aa5e3ae3..f58a25cd 100644
--- a/lang/en-US.json
+++ b/lang/en-US.json
@@ -1,6 +1,8 @@
{
"label.accounts": "Accounts",
"label.add-account": "Add account",
+ "label.add-column": "Add column",
+ "label.add-filter": "Add filter",
"label.add-website": "Add website",
"label.administrator": "Administrator",
"label.all": "All",
@@ -25,6 +27,8 @@
"label.edit-account": "Edit account",
"label.edit-website": "Edit website",
"label.enable-share-url": "Enable share URL",
+ "label.event-data": "Event Data",
+ "label.field-name": "Field Name",
"label.invalid": "Invalid",
"label.invalid-domain": "Invalid domain",
"label.language": "Language",
@@ -48,6 +52,7 @@
"label.reset": "Reset",
"label.reset-website": "Reset statistics",
"label.save": "Save",
+ "label.search": "Search",
"label.settings": "Settings",
"label.share-url": "Share URL",
"label.single-day": "Single day",
@@ -58,8 +63,10 @@
"label.timezone": "Timezone",
"label.today": "Today",
"label.tracking-code": "Tracking code",
+ "label.type": "Type",
"label.unknown": "Unknown",
"label.username": "Username",
+ "label.value": "Value",
"label.view-details": "View details",
"label.websites": "Websites",
"label.yesterday": "Yesterday",
diff --git a/lang/pl-PL.json b/lang/pl-PL.json
index 00dc9753..d5377774 100644
--- a/lang/pl-PL.json
+++ b/lang/pl-PL.json
@@ -1,6 +1,8 @@
{
"label.accounts": "Konta",
"label.add-account": "Dodaj konto",
+ "label.add-column": "Dodaj kolumnÄ™",
+ "label.add-filter": "Dodaj filtr",
"label.add-website": "Dodaj witrynÄ™",
"label.administrator": "Administrator",
"label.all": "Wszystkie",
@@ -25,6 +27,8 @@
"label.edit-account": "Edytuj konto",
"label.edit-website": "Edytuj witrynÄ™",
"label.enable-share-url": "Włącz udostępnianie adresu URL",
+ "label.event-data": "Dane zdarzenia",
+ "label.field-name": "Nazwa pola",
"label.invalid": "Nieprawidłowy",
"label.invalid-domain": "Nieprawidłowa witryna",
"label.language": "Język",
@@ -36,7 +40,7 @@
"label.more": "Więcej",
"label.name": "Nazwa",
"label.new-password": "Nowe hasło",
- "label.none": "None",
+ "label.none": "Brak",
"label.owner": "Właściciel",
"label.password": "Hasło",
"label.passwords-dont-match": "Hasła się nie zgadzają",
@@ -48,6 +52,7 @@
"label.reset": "Zresetuj",
"label.reset-website": "Zresetuj statystyki",
"label.save": "Zapisz",
+ "label.search": "Szukaj",
"label.settings": "Ustawienia",
"label.share-url": "Udostępnij adres URL",
"label.single-day": "W tym dniu",
@@ -58,16 +63,19 @@
"label.timezone": "Strefa czasowa",
"label.today": "Dzisiaj",
"label.tracking-code": "Kod śledzenia",
+ "label.type": "Typ",
"label.unknown": "Nieznany",
"label.username": "Nazwa użytkownika",
+ "label.value": "Wartość",
"label.view-details": "Pokaż szczegóły",
"label.websites": "Witryny",
+ "label.yesterday": "Wczoraj",
"message.active-users": "{x} aktualnie {x, plural, one {odwiedzajÄ…cy} other {odwiedzajÄ…cych}}",
"message.confirm-delete": "Czy na pewno chcesz usunąć {target}?",
"message.confirm-reset": "Czy na pewno chcesz zresetować statystyki {target}?",
"message.copied": "Skopiowano!",
"message.delete-warning": "Wszystkie powiązane dane również zostaną usunięte.",
- "message.edit-dashboard": "Edit dashboard",
+ "message.edit-dashboard": "Edytuj panel",
"message.failure": "Coś poszło nie tak.",
"message.get-share-url": "Uzyskaj adres URL udostępniania",
"message.get-tracking-code": "Pobierz kod śledzenia",
@@ -103,7 +111,7 @@
"metrics.operating-systems": "System operacyjny",
"metrics.page-views": "Wyświetlenia strony",
"metrics.pages": "Strony",
- "metrics.query-parameters": "Query parameters",
+ "metrics.query-parameters": "Parametry query",
"metrics.referrers": "Źródła odsyłające",
"metrics.screens": "Ekrany",
"metrics.unique-visitors": "Unikalni odwiedzajÄ…cy",
diff --git a/lib/auth.js b/lib/auth.js
deleted file mode 100644
index b50a923f..00000000
--- a/lib/auth.js
+++ /dev/null
@@ -1,60 +0,0 @@
-import { parseSecureToken, parseToken, getItem } from 'next-basics';
-import { AUTH_TOKEN, SHARE_TOKEN_HEADER } from './constants';
-import { getWebsiteById } from 'queries';
-import { secret } from './crypto';
-
-export async function getAuthToken(req) {
- try {
- const token = req.headers.authorization;
-
- return parseSecureToken(token.split(' ')[1], secret());
- } catch {
- return null;
- }
-}
-
-export function getAuthHeader() {
- const token = getItem(AUTH_TOKEN);
-
- return token ? { authorization: `Bearer ${token}` } : {};
-}
-
-export async function isValidToken(token, validation) {
- try {
- const result = parseToken(token, secret());
-
- if (typeof validation === 'object') {
- return !Object.keys(validation).find(key => result[key] !== validation[key]);
- } else if (typeof validation === 'function') {
- return validation(result);
- }
- } catch (e) {
- return false;
- }
-
- return false;
-}
-
-export async function allowQuery(req, skipToken) {
- const { id } = req.query;
- const token = req.headers[SHARE_TOKEN_HEADER];
- const websiteId = +id;
-
- const website = await getWebsiteById(websiteId);
-
- if (website) {
- if (token && token !== 'undefined' && !skipToken) {
- return isValidToken(token, { website_id: websiteId });
- }
-
- const authToken = await getAuthToken(req);
-
- if (authToken) {
- const { user_id, is_admin } = authToken;
-
- return is_admin || website.user_id === user_id;
- }
- }
-
- return false;
-}
diff --git a/lib/auth.ts b/lib/auth.ts
new file mode 100644
index 00000000..7ba778c7
--- /dev/null
+++ b/lib/auth.ts
@@ -0,0 +1,129 @@
+import { parseSecureToken, parseToken, ensureArray } from 'next-basics';
+import debug from 'debug';
+import cache from 'lib/cache';
+import { SHARE_TOKEN_HEADER, PERMISSIONS, ROLE_PERMISSIONS } from 'lib/constants';
+import { secret } from 'lib/crypto';
+import { getTeamUser } from 'queries';
+
+const log = debug('umami:auth');
+
+export function getAuthToken(req) {
+ try {
+ return req.headers.authorization.split(' ')[1];
+ } catch {
+ return null;
+ }
+}
+
+export function parseAuthToken(req) {
+ try {
+ return parseSecureToken(getAuthToken(req), secret());
+ } catch (e) {
+ log(e);
+ return null;
+ }
+}
+
+export function parseShareToken(req) {
+ try {
+ return parseToken(req.headers[SHARE_TOKEN_HEADER], secret());
+ } catch (e) {
+ log(e);
+ return null;
+ }
+}
+
+export function isValidToken(token, validation) {
+ try {
+ if (typeof validation === 'object') {
+ return !Object.keys(validation).find(key => token[key] !== validation[key]);
+ } else if (typeof validation === 'function') {
+ return validation(token);
+ }
+ } catch (e) {
+ log(e);
+ return false;
+ }
+
+ return false;
+}
+
+export async function canViewWebsite(userId: string, websiteId: string) {
+ const website = await cache.fetchWebsite(websiteId);
+
+ if (website.userId) {
+ return userId === website.userId;
+ }
+
+ if (website.teamId) {
+ return getTeamUser(website.teamId, userId);
+ }
+
+ return false;
+}
+
+export async function canUpdateWebsite(userId: string, websiteId: string) {
+ const website = await cache.fetchWebsite(websiteId);
+
+ if (website.userId) {
+ return userId === website.userId;
+ }
+
+ if (website.teamId) {
+ const teamUser = await getTeamUser(website.teamId, userId);
+
+ return hasPermission(teamUser.role, PERMISSIONS.websiteUpdate);
+ }
+
+ return false;
+}
+
+export async function canDeleteWebsite(userId: string, websiteId: string) {
+ const website = await cache.fetchWebsite(websiteId);
+
+ if (website.userId) {
+ return userId === website.userId;
+ }
+
+ if (website.teamId) {
+ const teamUser = await getTeamUser(website.teamId, userId);
+
+ return hasPermission(teamUser.role, PERMISSIONS.websiteDelete);
+ }
+
+ return false;
+}
+
+// To-do: Implement when payments are setup.
+export async function canCreateTeam(userId: string) {
+ return !!userId;
+}
+
+// To-do: Implement when payments are setup.
+export async function canViewTeam(userId: string, teamId) {
+ return getTeamUser(teamId, userId);
+}
+
+export async function canUpdateTeam(userId: string, teamId: string) {
+ const teamUser = await getTeamUser(teamId, userId);
+
+ return hasPermission(teamUser.role, PERMISSIONS.teamUpdate);
+}
+
+export async function canDeleteTeam(userId: string, teamId: string) {
+ const teamUser = await getTeamUser(teamId, userId);
+
+ return hasPermission(teamUser.role, PERMISSIONS.teamDelete);
+}
+
+export async function canViewUser(userId: string, viewedUserId: string) {
+ return userId === viewedUserId;
+}
+
+export async function canUpdateUser(userId: string, viewedUserId: string) {
+ return userId === viewedUserId;
+}
+
+export async function hasPermission(role: string, permission: string | string[]) {
+ return ensureArray(permission).some(e => ROLE_PERMISSIONS[role]?.includes(e));
+}
diff --git a/lib/cache.ts b/lib/cache.ts
new file mode 100644
index 00000000..5c79def0
--- /dev/null
+++ b/lib/cache.ts
@@ -0,0 +1,85 @@
+import { User, Website } from '@prisma/client';
+import redis from 'lib/redis';
+import { getSession, getUser, getWebsite } from '../queries';
+
+async function fetchObject(key, query) {
+ const obj = await redis.get(key);
+
+ if (!obj) {
+ return query().then(async data => {
+ if (data) {
+ await redis.set(key, data);
+ }
+
+ return data;
+ });
+ }
+
+ return obj;
+}
+
+async function storeObject(key, data) {
+ return redis.set(key, data);
+}
+
+async function deleteObject(key) {
+ return redis.set(key, redis.DELETED);
+}
+
+async function fetchWebsite(id): Promise {
+ return fetchObject(`website:${id}`, () => getWebsite({ id }));
+}
+
+async function storeWebsite(data) {
+ const { id } = data;
+ const key = `website:${id}`;
+
+ return storeObject(key, data);
+}
+
+async function deleteWebsite(id) {
+ return deleteObject(`website:${id}`);
+}
+
+async function fetchUser(id): Promise {
+ return fetchObject(`user:${id}`, () => getUser({ id }, true));
+}
+
+async function storeUser(data) {
+ const { id } = data;
+ const key = `user:${id}`;
+
+ return storeObject(key, data);
+}
+
+async function deleteUser(id) {
+ return deleteObject(`user:${id}`);
+}
+
+async function fetchSession(id) {
+ return fetchObject(`session:${id}`, () => getSession({ id }));
+}
+
+async function storeSession(data) {
+ const { id } = data;
+ const key = `session:${id}`;
+
+ return storeObject(key, data);
+}
+
+async function deleteSession(id) {
+ return deleteObject(`session:${id}`);
+}
+
+export default {
+ fetchWebsite,
+ storeWebsite,
+ deleteWebsite,
+ fetchUser,
+ storeUser,
+ deleteUser,
+ fetchSession,
+ storeSession,
+ deleteSession,
+ enabled: redis.enabled,
+};
diff --git a/lib/clickhouse.js b/lib/clickhouse.ts
similarity index 52%
rename from lib/clickhouse.js
rename to lib/clickhouse.ts
index 15304214..f59e04c6 100644
--- a/lib/clickhouse.js
+++ b/lib/clickhouse.ts
@@ -14,6 +14,9 @@ export const CLICKHOUSE_DATE_FORMATS = {
const log = debug('umami:clickhouse');
+let clickhouse: ClickHouse;
+const enabled = Boolean(process.env.CLICKHOUSE_URL);
+
function getClient() {
const {
hostname,
@@ -46,7 +49,7 @@ function getDateStringQuery(data, unit) {
return `formatDateTime(${data}, '${CLICKHOUSE_DATE_FORMATS[unit]}')`;
}
-function getDateQuery(field, unit, timezone) {
+function getDateQuery(field, unit, timezone?) {
if (timezone) {
return `date_trunc('${unit}', ${field}, '${timezone}')`;
}
@@ -57,12 +60,49 @@ function getDateFormat(date) {
return `'${dateFormat(date, 'UTC:yyyy-mm-dd HH:MM:ss')}'`;
}
-function getBetweenDates(field, start_at, end_at) {
- return `${field} between ${getDateFormat(start_at)}
- and ${getDateFormat(end_at)}`;
+function getBetweenDates(field, startAt, endAt) {
+ return `${field} between ${getDateFormat(startAt)} and ${getDateFormat(endAt)}`;
}
-function getFilterQuery(column, filters = {}, params = []) {
+function getJsonField(column, property) {
+ return `${column}.${property}`;
+}
+
+function getEventDataColumnsQuery(column, columns) {
+ const query = Object.keys(columns).reduce((arr, key) => {
+ const filter = columns[key];
+
+ if (filter === undefined) {
+ return arr;
+ }
+
+ arr.push(`${filter}(${getJsonField(column, key)}) as "${filter}(${key})"`);
+
+ return arr;
+ }, []);
+
+ return query.join(',\n');
+}
+
+function getEventDataFilterQuery(column, filters) {
+ const query = Object.keys(filters).reduce((arr, key) => {
+ const filter = filters[key];
+
+ if (filter === undefined) {
+ return arr;
+ }
+
+ arr.push(
+ `${getJsonField(column, key)} = ${typeof filter === 'string' ? `'${filter}'` : filter}`,
+ );
+
+ return arr;
+ }, []);
+
+ return query.join('\nand ');
+}
+
+function getFilterQuery(filters = {}, params = {}) {
const query = Object.keys(filters).reduce((arr, key) => {
const filter = filters[key];
@@ -76,20 +116,24 @@ function getFilterQuery(column, filters = {}, params = []) {
case 'browser':
case 'device':
case 'country':
- case 'event_name':
- arr.push(`and ${key}=$${params.length + 1}`);
- params.push(decodeURIComponent(filter));
+ arr.push(`and ${key} = {${key}:String}`);
+ params[key] = filter;
+ break;
+
+ case 'eventName':
+ arr.push(`and event_name = {${key}:String}`);
+ params[key] = filter;
break;
case 'referrer':
- arr.push(`and referrer like $${params.length + 1}`);
- params.push(`%${decodeURIComponent(filter)}%`);
+ arr.push(`and referrer ILIKE {${key}:String}`);
+ params[key] = `%${filter}`;
break;
case 'domain':
- arr.push(`and referrer not like $${params.length + 1}`);
- arr.push(`and referrer not like '/%'`);
- params.push(`%://${filter}/%`);
+ arr.push(`and referrer NOT ILIKE {${key}:String}`);
+ arr.push(`and referrer NOT ILIKE '/%'`);
+ params[key] = `%://${filter}/%`;
break;
case 'query':
@@ -102,49 +146,32 @@ function getFilterQuery(column, filters = {}, params = []) {
return query.join('\n');
}
-function parseFilters(column, filters = {}, params = []) {
- const { domain, url, event_url, referrer, os, browser, device, country, event_name, query } =
+function parseFilters(filters: any = {}, params: any = {}) {
+ const { domain, url, eventUrl, referrer, os, browser, device, country, eventName, query } =
filters;
const pageviewFilters = { domain, url, referrer, query };
const sessionFilters = { os, browser, device, country };
- const eventFilters = { url: event_url, event_name };
+ const eventFilters = { url: eventUrl, eventName };
return {
pageviewFilters,
sessionFilters,
eventFilters,
- event: { event_name },
- pageviewQuery: getFilterQuery(column, pageviewFilters, params),
- sessionQuery: getFilterQuery(column, sessionFilters, params),
- eventQuery: getFilterQuery(column, eventFilters, params),
+ event: { eventName },
+ filterQuery: getFilterQuery(filters, params),
};
}
-function formatQuery(str, params = []) {
- let formattedString = str;
-
- params.forEach((param, i) => {
- let replace = param;
-
- if (typeof param === 'string' || param instanceof String) {
- replace = `'${replace}'`;
- }
-
- formattedString = formattedString.replace(`$${i + 1}`, replace);
- });
-
- return formattedString;
-}
-
-async function rawQuery(query, params = []) {
- let formattedQuery = formatQuery(query, params);
-
+async function rawQuery(query, params = {}) {
if (process.env.LOG_QUERY) {
- log(formattedQuery);
+ log(query);
+ log(params);
}
- return clickhouse.query(formattedQuery).toPromise();
+ await connect();
+
+ return clickhouse.query(query, { params }).toPromise();
}
async function findUnique(data) {
@@ -159,16 +186,25 @@ async function findFirst(data) {
return data[0] ?? null;
}
-// Initialization
-const clickhouse = process.env.CLICKHOUSE_URL && (global[CLICKHOUSE] || getClient());
+async function connect() {
+ if (enabled && !clickhouse) {
+ clickhouse = process.env.CLICKHOUSE_URL && (global[CLICKHOUSE] || getClient());
+ }
+
+ return clickhouse;
+}
export default {
+ enabled,
client: clickhouse,
log,
+ connect,
getDateStringQuery,
getDateQuery,
getDateFormat,
getBetweenDates,
+ getEventDataColumnsQuery,
+ getEventDataFilterQuery,
getFilterQuery,
parseFilters,
findUnique,
diff --git a/lib/client.ts b/lib/client.ts
new file mode 100644
index 00000000..df68c6f8
--- /dev/null
+++ b/lib/client.ts
@@ -0,0 +1,14 @@
+import { getItem, setItem, removeItem } from 'next-basics';
+import { AUTH_TOKEN } from './constants';
+
+export function getAuthToken() {
+ return getItem(AUTH_TOKEN);
+}
+
+export function setAuthToken(token) {
+ setItem(AUTH_TOKEN, token);
+}
+
+export function removeAuthToken() {
+ removeItem(AUTH_TOKEN);
+}
diff --git a/lib/constants.js b/lib/constants.ts
similarity index 86%
rename from lib/constants.js
rename to lib/constants.ts
index feef540d..54933d53 100644
--- a/lib/constants.js
+++ b/lib/constants.ts
@@ -1,3 +1,4 @@
+/* eslint-disable no-unused-vars */
export const CURRENT_VERSION = process.env.currentVersion;
export const AUTH_TOKEN = 'umami.auth';
export const LOCALE_CONFIG = 'umami.locale';
@@ -21,6 +22,52 @@ export const DEFAULT_WEBSITE_LIMIT = 10;
export const REALTIME_RANGE = 30;
export const REALTIME_INTERVAL = 3000;
+export const EVENT_TYPE = {
+ pageView: 1,
+ customEvent: 2,
+};
+
+export const ROLES = {
+ admin: 'admin',
+ user: 'user',
+ teamOwner: 'team-owner',
+ teamMember: 'team-member',
+ teamGuest: 'team-guest',
+};
+
+export const PERMISSIONS = {
+ all: 'all',
+ websiteCreate: 'website:create',
+ websiteUpdate: 'website:update',
+ websiteDelete: 'website:delete',
+ teamCreate: 'team:create',
+ teamUpdate: 'team:update',
+ teamDelete: 'team:delete',
+};
+
+export const ROLE_PERMISSIONS = {
+ [ROLES.admin]: [PERMISSIONS.all],
+ [ROLES.user]: [
+ PERMISSIONS.websiteCreate,
+ PERMISSIONS.websiteUpdate,
+ PERMISSIONS.websiteDelete,
+ PERMISSIONS.teamCreate,
+ ],
+ [ROLES.teamOwner]: [
+ PERMISSIONS.teamUpdate,
+ PERMISSIONS.teamDelete,
+ PERMISSIONS.websiteCreate,
+ PERMISSIONS.websiteUpdate,
+ PERMISSIONS.websiteDelete,
+ ],
+ [ROLES.teamMember]: [
+ PERMISSIONS.websiteCreate,
+ PERMISSIONS.websiteUpdate,
+ PERMISSIONS.websiteDelete,
+ ],
+ [ROLES.teamGuest]: [],
+};
+
export const THEME_COLORS = {
light: {
primary: '#2680eb',
diff --git a/lib/crypto.js b/lib/crypto.js
index 74470549..ceb8aa99 100644
--- a/lib/crypto.js
+++ b/lib/crypto.js
@@ -9,11 +9,11 @@ export function secret() {
export function salt() {
const ROTATING_SALT = hash(startOfMonth(new Date()).toUTCString());
- return hash([secret(), ROTATING_SALT]);
+ return hash(secret(), ROTATING_SALT);
}
export function uuid(...args) {
if (!args.length) return v4();
- return v5(hash([...args, salt()]), v5.DNS);
+ return v5(hash(...args, salt()), v5.DNS);
}
diff --git a/lib/format.js b/lib/format.js
index a85c3ef7..e138831d 100644
--- a/lib/format.js
+++ b/lib/format.js
@@ -74,7 +74,7 @@ export function stringToColor(str) {
let color = '#';
for (let i = 0; i < 3; i++) {
let value = (hash >> (i * 8)) & 0xff;
- color += ('00' + value.toString(16)).substring(-2);
+ color += ('00' + value.toString(16)).slice(-2);
}
return color;
}
diff --git a/lib/kafka.js b/lib/kafka.js
index 03833585..782f2803 100644
--- a/lib/kafka.js
+++ b/lib/kafka.js
@@ -5,6 +5,10 @@ import { KAFKA, KAFKA_PRODUCER } from 'lib/db';
const log = debug('umami:kafka');
+let kafka;
+let producer;
+const enabled = Boolean(process.env.KAFKA_URL && process.env.KAFKA_BROKER);
+
function getClient() {
const { username, password } = new URL(process.env.KAFKA_URL);
const brokers = process.env.KAFKA_BROKER.split(',');
@@ -61,7 +65,7 @@ function getDateFormat(date) {
}
async function sendMessage(params, topic) {
- await getKafka();
+ await connect();
await producer.send({
topic,
@@ -74,7 +78,7 @@ async function sendMessage(params, topic) {
});
}
-async function getKafka() {
+async function connect() {
if (!kafka) {
kafka = process.env.KAFKA_URL && process.env.KAFKA_BROKER && (global[KAFKA] || getClient());
@@ -86,14 +90,12 @@ async function getKafka() {
return kafka;
}
-// Initialization
-let kafka;
-let producer;
-
export default {
+ enabled,
client: kafka,
producer,
log,
+ connect,
getDateFormat,
sendMessage,
};
diff --git a/lib/middleware.js b/lib/middleware.js
index f7289335..9d1498c7 100644
--- a/lib/middleware.js
+++ b/lib/middleware.js
@@ -1,23 +1,23 @@
-import { createMiddleware, unauthorized, badRequest, serverError } from 'next-basics';
+import { createMiddleware, unauthorized, badRequest, parseSecureToken } from 'next-basics';
+import debug from 'debug';
import cors from 'cors';
-import { getSession } from './session';
-import { getAuthToken } from './auth';
+import { validate } from 'uuid';
+import { findSession } from 'lib/session';
+import { getAuthToken, parseShareToken } from 'lib/auth';
+import { secret } from 'lib/crypto';
+import redis from 'lib/redis';
+import { ROLES } from 'lib/constants';
+import { getUser } from '../queries';
+
+const log = debug('umami:middleware');
export const useCors = createMiddleware(cors());
export const useSession = createMiddleware(async (req, res, next) => {
- let session;
-
- try {
- session = await getSession(req);
- } catch (e) {
- // eslint-disable-next-line no-console
- console.error(e);
-
- return serverError(res, e.message);
- }
+ const session = await findSession(req);
if (!session) {
+ log('useSession:session-not-found');
return badRequest(res);
}
@@ -26,12 +26,30 @@ export const useSession = createMiddleware(async (req, res, next) => {
});
export const useAuth = createMiddleware(async (req, res, next) => {
- const token = await getAuthToken(req);
+ const token = getAuthToken(req);
+ const payload = parseSecureToken(token, secret());
+ const shareToken = await parseShareToken(req);
- if (!token) {
+ let user = null;
+ const { userId, key } = payload || {};
+
+ if (validate(userId)) {
+ user = await getUser({ id: userId });
+ } else if (redis.enabled && key) {
+ user = await redis.get(key);
+ }
+
+ log({ token, payload, user, shareToken });
+
+ if (!user && !shareToken) {
+ log('useAuth:user-not-authorized');
return unauthorized(res);
}
- req.auth = token;
+ if (user) {
+ user.isAdmin = user.role === ROLES.admin;
+ }
+
+ req.auth = { user, token, shareToken, key };
next();
});
diff --git a/lib/prisma.js b/lib/prisma.ts
similarity index 54%
rename from lib/prisma.js
rename to lib/prisma.ts
index b93afafa..9100e17f 100644
--- a/lib/prisma.js
+++ b/lib/prisma.ts
@@ -4,6 +4,7 @@ import moment from 'moment-timezone';
import debug from 'debug';
import { PRISMA, MYSQL, POSTGRESQL, getDatabaseType } from 'lib/db';
import { FILTER_IGNORED } from 'lib/constants';
+import { PrismaClientOptions } from '@prisma/client/runtime';
const MYSQL_DATE_FORMATS = {
minute: '%Y-%m-%d %H:%i:00',
@@ -37,7 +38,8 @@ function logQuery(e) {
}
function getClient(options) {
- const prisma = new PrismaClient(options);
+ const prisma: PrismaClient =
+ new PrismaClient(options);
if (process.env.LOG_QUERY) {
prisma.$on('query', logQuery);
@@ -52,7 +54,19 @@ function getClient(options) {
return prisma;
}
-function getDateQuery(field, unit, timezone) {
+function toUuid(): string {
+ const db = getDatabaseType(process.env.DATABASE_URL);
+
+ if (db === POSTGRESQL) {
+ return '::uuid';
+ }
+
+ if (db === MYSQL) {
+ return '';
+ }
+}
+
+function getDateQuery(field: string, unit: string, timezone?: string): string {
const db = getDatabaseType(process.env.DATABASE_URL);
if (db === POSTGRESQL) {
@@ -73,7 +87,7 @@ function getDateQuery(field, unit, timezone) {
}
}
-function getTimestampInterval(field) {
+function getTimestampInterval(field): string {
const db = getDatabaseType(process.env.DATABASE_URL);
if (db === POSTGRESQL) {
@@ -85,7 +99,65 @@ function getTimestampInterval(field) {
}
}
-function getFilterQuery(table, column, filters = {}, params = []) {
+function getJsonField(column, property, isNumber): string {
+ const db = getDatabaseType(process.env.DATABASE_URL);
+
+ if (db === POSTGRESQL) {
+ let accessor = `${column} ->> '${property}'`;
+
+ if (isNumber) {
+ accessor = `CAST(${accessor} AS DECIMAL)`;
+ }
+
+ return accessor;
+ }
+
+ if (db === MYSQL) {
+ return `${column} ->> "$.${property}"`;
+ }
+}
+
+function getEventDataColumnsQuery(column, columns): string {
+ const query = Object.keys(columns).reduce((arr, key) => {
+ const filter = columns[key];
+
+ if (filter === undefined) {
+ return arr;
+ }
+
+ const isNumber = ['sum', 'avg', 'min', 'max'].some(a => a === filter);
+
+ arr.push(`${filter}(${getJsonField(column, key, isNumber)}) as "${filter}(${key})"`);
+
+ return arr;
+ }, []);
+
+ return query.join(',\n');
+}
+
+function getEventDataFilterQuery(column, filters): string {
+ const query = Object.keys(filters).reduce((arr, key) => {
+ const filter = filters[key];
+
+ if (filter === undefined) {
+ return arr;
+ }
+
+ const isNumber = filter && typeof filter === 'number';
+
+ arr.push(
+ `${getJsonField(column, key, isNumber)} = ${
+ typeof filter === 'string' ? `'${filter}'` : filter
+ }`,
+ );
+
+ return arr;
+ }, []);
+
+ return query.join('\nand ');
+}
+
+function getFilterQuery(filters = {}, params = []): string {
const query = Object.keys(filters).reduce((arr, key) => {
const filter = filters[key];
@@ -95,48 +167,25 @@ function getFilterQuery(table, column, filters = {}, params = []) {
switch (key) {
case 'url':
- if (table === 'pageview' || table === 'event') {
- arr.push(`and ${table}.${key}=$${params.length + 1}`);
- params.push(decodeURIComponent(filter));
- }
- break;
-
case 'os':
case 'browser':
case 'device':
case 'country':
- if (table === 'session') {
- arr.push(`and ${table}.${key}=$${params.length + 1}`);
- params.push(decodeURIComponent(filter));
- }
- break;
-
case 'event_name':
- if (table === 'event') {
- arr.push(`and ${table}.${key}=$${params.length + 1}`);
- params.push(decodeURIComponent(filter));
- }
+ arr.push(`and ${key}=$${params.length + 1}`);
+ params.push(decodeURIComponent(filter));
break;
-
case 'referrer':
- if (table === 'pageview' || table === 'event') {
- arr.push(`and ${table}.referrer like $${params.length + 1}`);
- params.push(`%${decodeURIComponent(filter)}%`);
- }
+ arr.push(`and referrer like $${params.length + 1}`);
+ params.push(`%${decodeURIComponent(filter)}%`);
break;
-
case 'domain':
- if (table === 'pageview') {
- arr.push(`and ${table}.referrer not like $${params.length + 1}`);
- arr.push(`and ${table}.referrer not like '/%'`);
- params.push(`%://${filter}/%`);
- }
+ arr.push(`and referrer not like $${params.length + 1}`);
+ arr.push(`and referrer not like '/%'`);
+ params.push(`%://${filter}/%`);
break;
-
case 'query':
- if (table === 'pageview') {
- arr.push(`and ${table}.url like '%?%'`);
- }
+ arr.push(`and url like '%?%'`);
}
return arr;
@@ -145,7 +194,11 @@ function getFilterQuery(table, column, filters = {}, params = []) {
return query.join('\n');
}
-function parseFilters(table, column, filters = {}, params = [], sessionKey = 'session_id') {
+function parseFilters(
+ filters: { [key: string]: any } = {},
+ params = [],
+ sessionKey = 'session_id',
+) {
const { domain, url, event_url, referrer, os, browser, device, country, event_name, query } =
filters;
@@ -160,15 +213,13 @@ function parseFilters(table, column, filters = {}, params = [], sessionKey = 'se
event: { event_name },
joinSession:
os || browser || device || country
- ? `inner join session on ${table}.${sessionKey} = session.${sessionKey}`
+ ? `inner join session on website_event.${sessionKey} = session.${sessionKey}`
: '',
- pageviewQuery: getFilterQuery('pageview', column, pageviewFilters, params),
- sessionQuery: getFilterQuery('session', column, sessionFilters, params),
- eventQuery: getFilterQuery('event', column, eventFilters, params),
+ filterQuery: getFilterQuery(filters, params),
};
}
-async function rawQuery(query, params = []) {
+async function rawQuery(query, params = []): Promise {
const db = getDatabaseType(process.env.DATABASE_URL);
if (db !== POSTGRESQL && db !== MYSQL) {
@@ -180,12 +231,13 @@ async function rawQuery(query, params = []) {
return prisma.$queryRawUnsafe.apply(prisma, [sql, ...params]);
}
-async function transaction(queries) {
+async function transaction(queries): Promise {
return prisma.$transaction(queries);
}
// Initialization
-const prisma = global[PRISMA] || getClient(PRISMA_OPTIONS);
+const prisma: PrismaClient =
+ global[PRISMA] || getClient(PRISMA_OPTIONS);
export default {
client: prisma,
@@ -193,6 +245,9 @@ export default {
getDateQuery,
getTimestampInterval,
getFilterQuery,
+ getEventDataColumnsQuery,
+ getEventDataFilterQuery,
+ toUuid,
parseFilters,
rawQuery,
transaction,
diff --git a/lib/redis.js b/lib/redis.js
index 63b513e6..02eb9424 100644
--- a/lib/redis.js
+++ b/lib/redis.js
@@ -1,65 +1,62 @@
-import Redis from 'ioredis';
-import { startOfMonth } from 'date-fns';
+import { createClient } from 'redis';
import debug from 'debug';
-import { getSessions, getAllWebsites } from 'queries';
-import { REDIS } from 'lib/db';
const log = debug('umami:redis');
-const INITIALIZED = 'redis:initialized';
-export const DELETED = 'deleted';
+const REDIS = Symbol();
+const DELETED = 'DELETED';
-function getClient() {
- if (!process.env.REDIS_URL) {
+let redis;
+const url = process.env.REDIS_URL;
+const enabled = Boolean(url);
+
+async function getClient() {
+ if (!enabled) {
return null;
}
- const redis = new Redis(process.env.REDIS_URL, {
- retryStrategy(times) {
- log(`Redis reconnecting attempt: ${times}`);
- return 5000;
- },
- });
+ const client = createClient({ url });
+ client.on('error', err => log(err));
+ await client.connect();
if (process.env.NODE_ENV !== 'production') {
- global[REDIS] = redis;
+ global[REDIS] = client;
}
log('Redis initialized');
+ return client;
+}
+
+async function get(key) {
+ await connect();
+
+ const data = await redis.get(key);
+
+ try {
+ return JSON.parse(data);
+ } catch {
+ return null;
+ }
+}
+
+async function set(key, value) {
+ await connect();
+
+ return redis.set(key, JSON.stringify(value));
+}
+
+async function del(key) {
+ await connect();
+
+ return redis.del(key);
+}
+
+async function connect() {
+ if (!redis && enabled) {
+ redis = global[REDIS] || (await getClient());
+ }
+
return redis;
}
-async function stageData() {
- const sessions = await getSessions([], startOfMonth(new Date()));
- const websites = await getAllWebsites();
-
- const sessionUuids = sessions.map(a => {
- return { key: `session:${a.session_uuid}`, value: 1 };
- });
- const websiteIds = websites.map(a => {
- return { key: `website:${a.website_uuid}`, value: Number(a.website_id) };
- });
-
- await addRedis(sessionUuids);
- await addRedis(websiteIds);
-
- await redis.set(INITIALIZED, 1);
-}
-
-async function addRedis(ids) {
- for (let i = 0; i < ids.length; i++) {
- const { key, value } = ids[i];
- await redis.set(key, value);
- }
-}
-
-// Initialization
-const redis = process.env.REDIS_URL && (global[REDIS] || getClient());
-
-(async () => {
- if (redis && !(await redis.get(INITIALIZED))) {
- await stageData();
- }
-})();
-
-export default { client: redis, stageData, log };
+export default { enabled, client: redis, log, connect, get, set, del, DELETED };
diff --git a/lib/session.js b/lib/session.js
index 7feafc15..153b524c 100644
--- a/lib/session.js
+++ b/lib/session.js
@@ -1,105 +1,96 @@
import { parseToken } from 'next-basics';
import { validate } from 'uuid';
-import { uuid } from 'lib/crypto';
-import redis, { DELETED } from 'lib/redis';
-import { getClientInfo, getJsonBody } from 'lib/request';
-import { createSession, getSessionByUuid, getWebsiteByUuid } from 'queries';
+import { secret, uuid } from 'lib/crypto';
+import cache from 'lib/cache';
import clickhouse from 'lib/clickhouse';
+import { getClientInfo, getJsonBody } from 'lib/request';
+import { createSession, getSession, getWebsite } from 'queries';
-export async function getSession(req) {
+export async function findSession(req) {
const { payload } = getJsonBody(req);
- const hasRedis = redis.client;
- const hasClickhouse = clickhouse.client;
if (!payload) {
- throw new Error('Invalid request');
+ return null;
}
- const cache = req.headers['x-umami-cache'];
+ // Check if cache token is passed
+ const cacheToken = req.headers['x-umami-cache'];
- if (cache) {
- const result = await parseToken(cache);
+ if (cacheToken) {
+ const result = await parseToken(cacheToken, secret());
if (result) {
return result;
}
}
- const { website: website_uuid, hostname, screen, language } = payload;
+ // Verify payload
+ const { website: websiteId, hostname, screen, language } = payload;
- if (!validate(website_uuid)) {
+ if (!validate(websiteId)) {
return null;
}
- let websiteId = null;
+ // Find website
+ let website;
- // Check if website exists
- if (hasRedis) {
- websiteId = Number(await redis.client.get(`website:${website_uuid}`));
+ if (cache.enabled) {
+ website = await cache.fetchWebsite(websiteId);
+ } else {
+ website = await getWebsite({ id: websiteId });
}
- // Check database if does not exists in Redis
- if (!websiteId) {
- const website = await getWebsiteByUuid(website_uuid);
- websiteId = website ? website.website_id : null;
- }
-
- if (!websiteId || websiteId === DELETED) {
- throw new Error(`Website not found: ${website_uuid}`);
+ if (!website || website.deletedAt) {
+ throw new Error(`Website not found: ${websiteId}`);
}
const { userAgent, browser, os, ip, country, device } = await getClientInfo(req, payload);
- const session_uuid = uuid(websiteId, hostname, ip, userAgent);
+ const sessionId = uuid(websiteId, hostname, ip, userAgent);
- let sessionId = null;
- let session = null;
-
- if (!hasClickhouse) {
- // Check if session exists
- if (hasRedis) {
- sessionId = Number(await redis.client.get(`session:${session_uuid}`));
- }
-
- // Check database if does not exists in Redis
- if (!sessionId) {
- session = await getSessionByUuid(session_uuid);
- sessionId = session ? session.session_id : null;
- }
-
- if (!sessionId) {
- try {
- session = await createSession(websiteId, {
- session_uuid,
- hostname,
- browser,
- os,
- screen,
- language,
- country,
- device,
- });
- } catch (e) {
- if (!e.message.toLowerCase().includes('unique constraint')) {
- throw e;
- }
- }
- }
- } else {
- session = {
- session_id: sessionId,
- session_uuid,
+ // Clickhouse does not require session lookup
+ if (clickhouse.enabled) {
+ return {
+ id: sessionId,
+ websiteId,
hostname,
browser,
os,
+ device,
screen,
language,
country,
- device,
};
}
- return {
- website_id: websiteId,
- session,
- };
+ // Find session
+ let session;
+
+ if (cache.enabled) {
+ session = await cache.fetchSession(sessionId);
+ } else {
+ session = await getSession({ id: sessionId });
+ }
+
+ // Create a session if not found
+ if (!session) {
+ try {
+ session = await createSession({
+ id: sessionId,
+ websiteId,
+ hostname,
+ browser,
+ os,
+ device,
+ screen,
+ language,
+ country,
+ });
+ } catch (e) {
+ if (!e.message.toLowerCase().includes('unique constraint')) {
+ throw e;
+ }
+ }
+ }
+
+ return session;
}
diff --git a/lib/types.ts b/lib/types.ts
new file mode 100644
index 00000000..9dc01719
--- /dev/null
+++ b/lib/types.ts
@@ -0,0 +1,92 @@
+import { NextApiRequest } from 'next';
+
+export interface Auth {
+ user?: {
+ id: string;
+ username: string;
+ role: string;
+ isAdmin: boolean;
+ };
+ shareToken?: {
+ websiteId: string;
+ };
+}
+
+export interface NextApiRequestQueryBody extends NextApiRequest {
+ auth?: Auth;
+ query: TQuery & { [key: string]: string | string[] };
+ body: TBody;
+ headers: any;
+}
+
+export interface NextApiRequestAuth extends NextApiRequest {
+ auth?: Auth;
+ headers: any;
+}
+
+export interface Website {
+ id: string;
+ userId: string;
+ revId: number;
+ name: string;
+ domain: string;
+ shareId: string;
+ createdAt: Date;
+}
+
+export interface Share {
+ id: string;
+ token: string;
+}
+
+export interface Empty {}
+
+export interface WebsiteActive {
+ x: number;
+}
+
+export interface WebsiteEventDataMetric {
+ [key: string]: number;
+}
+
+export interface WebsiteMetric {
+ x: string;
+ y: number;
+}
+
+export interface WebsiteEventMetric {
+ x: string;
+ t: string;
+ y: number;
+}
+
+export interface WebsitePageviews {
+ pageviews: {
+ t: string;
+ y: number;
+ };
+ sessions: {
+ t: string;
+ y: number;
+ };
+}
+
+export interface WebsiteStats {
+ pageviews: { value: number; change: number };
+ uniques: { value: number; change: number };
+ bounces: { value: number; change: number };
+ totalTime: { value: number; change: number };
+}
+
+export interface RealtimeInit {
+ websites: Website[];
+ token: string;
+ data: RealtimeUpdate;
+}
+
+export interface RealtimeUpdate {
+ pageviews: any[];
+ sessions: any[];
+ events: any[];
+ timestamp: number;
+}
diff --git a/netlify.toml b/netlify.toml
index 0d8c6fc1..c2beb95e 100644
--- a/netlify.toml
+++ b/netlify.toml
@@ -1,2 +1,5 @@
[functions]
included_files = ["node_modules/.geo/**"]
+
+[[plugins]]
+package = "@netlify/plugin-nextjs"
diff --git a/next-env.d.ts b/next-env.d.ts
new file mode 100644
index 00000000..4f11a03d
--- /dev/null
+++ b/next-env.d.ts
@@ -0,0 +1,5 @@
+///
+///
+
+// NOTE: This file should not be edited
+// see https://nextjs.org/docs/basic-features/typescript for more information.
diff --git a/next.config.js b/next.config.js
index 0401516c..eac47415 100644
--- a/next.config.js
+++ b/next.config.js
@@ -36,16 +36,20 @@ module.exports = {
env: {
currentVersion: pkg.version,
isProduction: process.env.NODE_ENV === 'production',
+ uiDisabled: !!process.env.DISABLE_UI,
},
basePath: process.env.BASE_PATH,
output: 'standalone',
eslint: {
ignoreDuringBuilds: true,
},
+ typescript: {
+ ignoreBuildErrors: true,
+ },
webpack(config) {
config.module.rules.push({
test: /\.svg$/,
- issuer: /\.js$/,
+ issuer: /\.{js|jsx|ts|tsx}$/,
use: ['@svgr/webpack'],
});
diff --git a/package.json b/package.json
index edec73e7..9d1ba3da 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "umami",
- "version": "1.39.0-beta.1",
+ "version": "2.0.0-beta.2",
"description": "A simple, fast, privacy-focused alternative to Google Analytics.",
"author": "Mike Cao ",
"license": "MIT",
@@ -42,7 +42,7 @@
"postbuild": "node scripts/postbuild.js"
},
"lint-staged": {
- "**/*.js": [
+ "**/*.{js,jsx,ts,tsx}": [
"prettier --write",
"eslint"
],
@@ -56,7 +56,8 @@
},
"dependencies": {
"@fontsource/inter": "4.5.7",
- "@prisma/client": "4.3.1",
+ "@prisma/client": "4.5.0",
+ "@tanstack/react-query": "^4.16.1",
"chalk": "^4.1.1",
"chart.js": "^2.9.4",
"classnames": "^2.3.1",
@@ -74,7 +75,6 @@
"formik": "^2.2.9",
"fs-extra": "^10.0.1",
"immer": "^9.0.12",
- "ioredis": "^5.2.3",
"ipaddr.js": "^2.0.1",
"is-ci": "^3.0.1",
"is-docker": "^3.0.0",
@@ -83,20 +83,22 @@
"kafkajs": "^2.1.0",
"maxmind": "^4.3.6",
"moment-timezone": "^0.5.35",
- "next": "^12.2.5",
- "next-basics": "^0.12.0",
+ "next": "^12.3.1",
+ "next-basics": "^0.24.0",
"node-fetch": "^3.2.8",
"npm-run-all": "^4.1.5",
"prop-types": "^15.7.2",
- "react": "^17.0.0",
+ "react": "^18.2.0",
+ "react-basics": "^0.37.0",
"react-beautiful-dnd": "^13.1.0",
- "react-dom": "^17.0.0",
+ "react-dom": "^18.2.0",
"react-intl": "^5.24.7",
"react-simple-maps": "^2.3.0",
"react-spring": "^9.4.4",
"react-tooltip": "^4.2.21",
"react-use-measure": "^2.0.4",
"react-window": "^1.8.6",
+ "redis": "^4.5.0",
"request-ip": "^3.3.0",
"semver": "^7.3.6",
"thenby": "^1.3.4",
@@ -106,6 +108,7 @@
},
"devDependencies": {
"@formatjs/cli": "^4.2.29",
+ "@netlify/plugin-nextjs": "^4.27.3",
"@rollup/plugin-buble": "^0.21.3",
"@rollup/plugin-replace": "^4.0.0",
"@svgr/webpack": "^6.2.1",
@@ -125,7 +128,7 @@
"postcss-preset-env": "7.4.3",
"postcss-rtlcss": "^3.6.1",
"prettier": "^2.6.2",
- "prisma": "4.3.1",
+ "prisma": "4.5.0",
"prompts": "2.4.2",
"rollup": "^2.70.1",
"rollup-plugin-terser": "^7.0.2",
diff --git a/pages/_app.js b/pages/_app.js
index b8653113..10fa09ec 100644
--- a/pages/_app.js
+++ b/pages/_app.js
@@ -1,46 +1,30 @@
-import Head from 'next/head';
-import { useRouter } from 'next/router';
import { IntlProvider } from 'react-intl';
+import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
import useLocale from 'hooks/useLocale';
+import useConfig from 'hooks/useConfig';
+import 'react-basics/dist/styles.css';
import 'styles/variables.css';
-import 'styles/bootstrap-grid.css';
import 'styles/index.css';
import '@fontsource/inter/400.css';
import '@fontsource/inter/600.css';
-const Intl = ({ children }) => {
+const client = new QueryClient();
+
+export default function App({ Component, pageProps }) {
const { locale, messages } = useLocale();
+ useConfig();
const Wrapper = ({ children }) => {children};
- return (
-
- {children}
-
- );
-};
-
-export default function App({ Component, pageProps }) {
- const { basePath } = useRouter();
- const { dir } = useLocale();
+ if (process.env.uiDisabled) {
+ return null;
+ }
return (
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
-
-
+
+
);
}
diff --git a/pages/api/accounts/[id]/index.js b/pages/api/accounts/[id]/index.js
deleted file mode 100644
index e5020f1f..00000000
--- a/pages/api/accounts/[id]/index.js
+++ /dev/null
@@ -1,68 +0,0 @@
-import { badRequest, hashPassword, methodNotAllowed, ok, unauthorized } from 'next-basics';
-import { getAccountById, deleteAccount, getAccountByUsername, updateAccount } from 'queries';
-import { useAuth } from 'lib/middleware';
-
-export default async (req, res) => {
- await useAuth(req, res);
-
- const { is_admin: currentUserIsAdmin, user_id: currentUserId } = req.auth;
- const { id } = req.query;
- const userId = +id;
-
- if (req.method === 'GET') {
- if (userId !== currentUserId && !currentUserIsAdmin) {
- return unauthorized(res);
- }
-
- const account = await getAccountById(userId);
-
- return ok(res, account);
- }
-
- if (req.method === 'POST') {
- const { username, password, is_admin } = req.body;
-
- if (userId !== currentUserId && !currentUserIsAdmin) {
- return unauthorized(res);
- }
-
- const account = await getAccountById(userId);
-
- const data = {};
-
- if (password) {
- data.password = hashPassword(password);
- }
-
- // Only admin can change these fields
- if (currentUserIsAdmin) {
- data.username = username;
- data.is_admin = is_admin;
- }
-
- // Check when username changes
- if (data.username && account.username !== data.username) {
- const accountByUsername = await getAccountByUsername(username);
-
- if (accountByUsername) {
- return badRequest(res, 'Account already exists');
- }
- }
-
- const updated = await updateAccount(userId, data);
-
- return ok(res, updated);
- }
-
- if (req.method === 'DELETE') {
- if (!currentUserIsAdmin) {
- return unauthorized(res);
- }
-
- await deleteAccount(userId);
-
- return ok(res);
- }
-
- return methodNotAllowed(res);
-};
diff --git a/pages/api/accounts/[id]/password.js b/pages/api/accounts/[id]/password.js
deleted file mode 100644
index 96858205..00000000
--- a/pages/api/accounts/[id]/password.js
+++ /dev/null
@@ -1,39 +0,0 @@
-import { getAccountById, updateAccount } from 'queries';
-import { useAuth } from 'lib/middleware';
-import {
- badRequest,
- methodNotAllowed,
- ok,
- unauthorized,
- checkPassword,
- hashPassword,
-} from 'next-basics';
-
-export default async (req, res) => {
- await useAuth(req, res);
-
- const { user_id: currentUserId, is_admin: currentUserIsAdmin } = req.auth;
- const { current_password, new_password } = req.body;
- const { id } = req.query;
- const userId = +id;
-
- if (!currentUserIsAdmin && userId !== currentUserId) {
- return unauthorized(res);
- }
-
- if (req.method === 'POST') {
- const account = await getAccountById(userId);
-
- if (!checkPassword(current_password, account.password)) {
- return badRequest(res, 'Current password is incorrect');
- }
-
- const password = hashPassword(new_password);
-
- const updated = await updateAccount(userId, { password });
-
- return ok(res, updated);
- }
-
- return methodNotAllowed(res);
-};
diff --git a/pages/api/accounts/index.js b/pages/api/accounts/index.js
deleted file mode 100644
index 4c2b8b20..00000000
--- a/pages/api/accounts/index.js
+++ /dev/null
@@ -1,40 +0,0 @@
-import { ok, unauthorized, methodNotAllowed, badRequest, hashPassword } from 'next-basics';
-import { useAuth } from 'lib/middleware';
-import { uuid } from 'lib/crypto';
-import { createAccount, getAccountByUsername, getAccounts } from 'queries';
-
-export default async (req, res) => {
- await useAuth(req, res);
-
- const { is_admin } = req.auth;
-
- if (!is_admin) {
- return unauthorized(res);
- }
-
- if (req.method === 'GET') {
- const accounts = await getAccounts();
-
- return ok(res, accounts);
- }
-
- if (req.method === 'POST') {
- const { username, password, account_uuid } = req.body;
-
- const accountByUsername = await getAccountByUsername(username);
-
- if (accountByUsername) {
- return badRequest(res, 'Account already exists');
- }
-
- const created = await createAccount({
- username,
- password: hashPassword(password),
- account_uuid: account_uuid || uuid(),
- });
-
- return ok(res, created);
- }
-
- return methodNotAllowed(res);
-};
diff --git a/pages/api/auth/login.js b/pages/api/auth/login.js
deleted file mode 100644
index f1d99100..00000000
--- a/pages/api/auth/login.js
+++ /dev/null
@@ -1,23 +0,0 @@
-import { ok, unauthorized, badRequest, checkPassword, createSecureToken } from 'next-basics';
-import { getAccountByUsername } from 'queries/admin/account/getAccountByUsername';
-import { secret } from 'lib/crypto';
-
-export default async (req, res) => {
- const { username, password } = req.body;
-
- if (!username || !password) {
- return badRequest(res);
- }
-
- const account = await getAccountByUsername(username);
-
- if (account && checkPassword(password, account.password)) {
- const { user_id, username, is_admin } = account;
- const user = { user_id, username, is_admin };
- const token = createSecureToken(user, secret());
-
- return ok(res, { token, user });
- }
-
- return unauthorized(res);
-};
diff --git a/pages/api/auth/login.ts b/pages/api/auth/login.ts
new file mode 100644
index 00000000..e5e0dab7
--- /dev/null
+++ b/pages/api/auth/login.ts
@@ -0,0 +1,59 @@
+import {
+ ok,
+ unauthorized,
+ badRequest,
+ checkPassword,
+ createSecureToken,
+ methodNotAllowed,
+ getRandomChars,
+} from 'next-basics';
+import { getUser, User } from 'queries';
+import { secret } from 'lib/crypto';
+import redis from 'lib/redis';
+import { NextApiRequestQueryBody } from 'lib/types';
+import { NextApiResponse } from 'next';
+
+export interface LoginRequestBody {
+ username: string;
+ password: string;
+}
+
+export interface LoginResponse {
+ token: string;
+ user: User;
+}
+
+export default async (
+ req: NextApiRequestQueryBody,
+ res: NextApiResponse,
+) => {
+ if (req.method === 'POST') {
+ const { username, password } = req.body;
+
+ if (!username || !password) {
+ return badRequest(res);
+ }
+
+ const user = await getUser({ username }, { includePassword: true });
+
+ if (user && checkPassword(password, user.password)) {
+ if (redis.enabled) {
+ const key = `auth:${getRandomChars(32)}`;
+
+ await redis.set(key, user);
+
+ const token = createSecureToken({ key }, secret());
+
+ return ok(res, { token, user });
+ }
+
+ const token = createSecureToken(user.id, secret());
+
+ return ok(res, { token, user });
+ }
+
+ return unauthorized(res, 'Incorrect username and/or password.');
+ }
+
+ return methodNotAllowed(res);
+};
diff --git a/pages/api/auth/logout.ts b/pages/api/auth/logout.ts
new file mode 100644
index 00000000..c05a05de
--- /dev/null
+++ b/pages/api/auth/logout.ts
@@ -0,0 +1,19 @@
+import { methodNotAllowed, ok } from 'next-basics';
+import { useAuth } from 'lib/middleware';
+import redis from 'lib/redis';
+import { getAuthToken } from 'lib/auth';
+import { NextApiRequest, NextApiResponse } from 'next';
+
+export default async (req: NextApiRequest, res: NextApiResponse) => {
+ await useAuth(req, res);
+
+ if (req.method === 'POST') {
+ if (redis.enabled) {
+ await redis.del(getAuthToken(req));
+ }
+
+ return ok(res);
+ }
+
+ return methodNotAllowed(res);
+};
diff --git a/pages/api/auth/verify.js b/pages/api/auth/verify.js
deleted file mode 100644
index 303a38ec..00000000
--- a/pages/api/auth/verify.js
+++ /dev/null
@@ -1,12 +0,0 @@
-import { useAuth } from 'lib/middleware';
-import { ok, unauthorized } from 'next-basics';
-
-export default async (req, res) => {
- await useAuth(req, res);
-
- if (req.auth) {
- return ok(res, req.auth);
- }
-
- return unauthorized(res);
-};
diff --git a/pages/api/auth/verify.ts b/pages/api/auth/verify.ts
new file mode 100644
index 00000000..9eb9ea48
--- /dev/null
+++ b/pages/api/auth/verify.ts
@@ -0,0 +1,10 @@
+import { NextApiRequestAuth } from 'lib/types';
+import { useAuth } from 'lib/middleware';
+import { NextApiResponse } from 'next';
+import { ok } from 'next-basics';
+
+export default async (req: NextApiRequestAuth, res: NextApiResponse) => {
+ await useAuth(req, res);
+
+ return ok(res, req.auth);
+};
diff --git a/pages/api/collect.js b/pages/api/collect.ts
similarity index 65%
rename from pages/api/collect.js
rename to pages/api/collect.ts
index f253d09e..9246c9c6 100644
--- a/pages/api/collect.js
+++ b/pages/api/collect.ts
@@ -5,15 +5,40 @@ import { createToken, unauthorized, send, badRequest, forbidden } from 'next-bas
import { savePageView, saveEvent } from 'queries';
import { useCors, useSession } from 'lib/middleware';
import { getJsonBody, getIpAddress } from 'lib/request';
-import { secret, uuid } from 'lib/crypto';
+import { secret } from 'lib/crypto';
+import { NextApiRequest, NextApiResponse } from 'next';
-export default async (req, res) => {
+export interface NextApiRequestCollect extends NextApiRequest {
+ session: {
+ id: string;
+ websiteId: string;
+ hostname: string;
+ browser: string;
+ os: string;
+ device: string;
+ screen: string;
+ language: string;
+ country: string;
+ };
+}
+
+export default async (req: NextApiRequestCollect, res: NextApiResponse) => {
await useCors(req, res);
if (isbot(req.headers['user-agent']) && !process.env.DISABLE_BOT_CHECK) {
return unauthorized(res);
}
+ const { type, payload } = getJsonBody(req);
+
+ const { referrer, event_name: eventName, event_data: eventData } = payload;
+ let { url } = payload;
+
+ // Validate eventData is JSON
+ if (eventData && !(typeof eventData === 'object' && !Array.isArray(eventData))) {
+ return badRequest(res, 'Event Data must be in the form of a JSON Object.');
+ }
+
const ignoreIps = process.env.IGNORE_IP;
const ignoreHostnames = process.env.IGNORE_HOSTNAME;
@@ -58,38 +83,27 @@ export default async (req, res) => {
await useSession(req, res);
- const {
- session: { website_id, session },
- } = req;
-
- const { type, payload } = getJsonBody(req);
-
- let { url, referrer, event_name, event_data } = payload;
+ const session = req.session;
if (process.env.REMOVE_TRAILING_SLASH) {
url = url.replace(/\/$/, '');
}
- const event_uuid = uuid();
-
if (type === 'pageview') {
- await savePageView(website_id, { session, url, referrer });
+ await savePageView({ ...session, url, referrer });
} else if (type === 'event') {
- await saveEvent(website_id, {
- session,
- event_uuid,
+ await saveEvent({
+ ...session,
url,
- event_name,
- event_data,
+ referrer,
+ eventName,
+ eventData,
});
} else {
return badRequest(res);
}
- const token = createToken(
- { website_id, session_id: session.session_id, session_uuid: session.session_uuid },
- secret(),
- );
+ const token = createToken(session, secret());
return send(res, token);
};
diff --git a/pages/api/config.js b/pages/api/config.ts
similarity index 50%
rename from pages/api/config.js
rename to pages/api/config.ts
index 27a04eaa..e5ae318a 100644
--- a/pages/api/config.js
+++ b/pages/api/config.ts
@@ -1,12 +1,22 @@
+import { NextApiRequest, NextApiResponse } from 'next';
import { ok, methodNotAllowed } from 'next-basics';
-export default async (req, res) => {
+export interface ConfigResponse {
+ basePath: string;
+ trackerScriptName: string;
+ updatesDisabled: boolean;
+ telemetryDisabled: boolean;
+ adminDisabled: boolean;
+}
+
+export default async (req: NextApiRequest, res: NextApiResponse) => {
if (req.method === 'GET') {
return ok(res, {
basePath: process.env.BASE_PATH || '',
trackerScriptName: process.env.TRACKER_SCRIPT_NAME,
updatesDisabled: !!process.env.DISABLE_UPDATES,
telemetryDisabled: !!process.env.DISABLE_TELEMETRY,
+ adminDisabled: !!process.env.DISABLE_ADMIN,
});
}
diff --git a/pages/api/heartbeat.js b/pages/api/heartbeat.js
deleted file mode 100644
index a4ee5923..00000000
--- a/pages/api/heartbeat.js
+++ /dev/null
@@ -1,5 +0,0 @@
-import { ok } from 'next-basics';
-
-export default async (req, res) => {
- return ok(res);
-};
diff --git a/pages/api/heartbeat.ts b/pages/api/heartbeat.ts
new file mode 100644
index 00000000..1b515d39
--- /dev/null
+++ b/pages/api/heartbeat.ts
@@ -0,0 +1,6 @@
+import { NextApiRequest, NextApiResponse } from 'next';
+import { ok } from 'next-basics';
+
+export default async (req: NextApiRequest, res: NextApiResponse) => {
+ return ok(res);
+};
diff --git a/pages/api/realtime/init.js b/pages/api/realtime/init.js
deleted file mode 100644
index ee8f4ee2..00000000
--- a/pages/api/realtime/init.js
+++ /dev/null
@@ -1,26 +0,0 @@
-import { subMinutes } from 'date-fns';
-import { ok, methodNotAllowed, createToken } from 'next-basics';
-import { useAuth } from 'lib/middleware';
-import { getUserWebsites, getRealtimeData } from 'queries';
-import { secret } from 'lib/crypto';
-
-export default async (req, res) => {
- await useAuth(req, res);
-
- if (req.method === 'GET') {
- const { user_id } = req.auth;
-
- const websites = await getUserWebsites(user_id);
- const ids = websites.map(({ website_id }) => website_id);
- const token = createToken({ websites: ids }, secret());
- const data = await getRealtimeData(ids, subMinutes(new Date(), 30));
-
- return ok(res, {
- websites,
- token,
- data,
- });
- }
-
- return methodNotAllowed(res);
-};
diff --git a/pages/api/realtime/init.ts b/pages/api/realtime/init.ts
new file mode 100644
index 00000000..4e04c37b
--- /dev/null
+++ b/pages/api/realtime/init.ts
@@ -0,0 +1,29 @@
+import { subMinutes } from 'date-fns';
+import { RealtimeInit } from 'lib/types';
+import { NextApiRequestAuth } from 'lib/types';
+import { secret } from 'lib/crypto';
+import { useAuth } from 'lib/middleware';
+import { NextApiResponse } from 'next';
+import { createToken, methodNotAllowed, ok } from 'next-basics';
+import { getRealtimeData, getUserWebsites } from 'queries';
+
+export default async (req: NextApiRequestAuth, res: NextApiResponse) => {
+ await useAuth(req, res);
+
+ if (req.method === 'GET') {
+ const { id: userId } = req.auth.user;
+
+ const websites = await getUserWebsites(userId);
+ const ids = websites.map(({ id }) => id);
+ const token = createToken({ websites: ids }, secret());
+ const data = await getRealtimeData(ids, subMinutes(new Date(), 30));
+
+ return ok(res, {
+ websites,
+ token,
+ data,
+ });
+ }
+
+ return methodNotAllowed(res);
+};
diff --git a/pages/api/realtime/update.js b/pages/api/realtime/update.ts
similarity index 66%
rename from pages/api/realtime/update.js
rename to pages/api/realtime/update.ts
index 9b91663d..9b99a282 100644
--- a/pages/api/realtime/update.js
+++ b/pages/api/realtime/update.ts
@@ -3,8 +3,18 @@ import { useAuth } from 'lib/middleware';
import { getRealtimeData } from 'queries';
import { SHARE_TOKEN_HEADER } from 'lib/constants';
import { secret } from 'lib/crypto';
+import { NextApiRequestQueryBody } from 'lib/types';
+import { NextApiResponse } from 'next';
+import { RealtimeUpdate } from 'lib/types';
-export default async (req, res) => {
+export interface InitUpdateRequestQuery {
+ start_at: string;
+}
+
+export default async (
+ req: NextApiRequestQueryBody,
+ res: NextApiResponse,
+) => {
await useAuth(req, res);
if (req.method === 'GET') {
diff --git a/pages/api/share/[id].js b/pages/api/share/[id].js
deleted file mode 100644
index e6dcb4a3..00000000
--- a/pages/api/share/[id].js
+++ /dev/null
@@ -1,22 +0,0 @@
-import { getWebsiteByShareId } from 'queries';
-import { ok, notFound, methodNotAllowed, createToken } from 'next-basics';
-import { secret } from 'lib/crypto';
-
-export default async (req, res) => {
- const { id } = req.query;
-
- if (req.method === 'GET') {
- const website = await getWebsiteByShareId(id);
-
- if (website) {
- const websiteId = website.website_id;
- const token = createToken({ website_id: websiteId }, secret());
-
- return ok(res, { websiteId, token });
- }
-
- return notFound(res);
- }
-
- return methodNotAllowed(res);
-};
diff --git a/pages/api/share/[id].ts b/pages/api/share/[id].ts
new file mode 100644
index 00000000..b5511f2d
--- /dev/null
+++ b/pages/api/share/[id].ts
@@ -0,0 +1,36 @@
+import { NextApiRequestQueryBody } from 'lib/types';
+import { secret } from 'lib/crypto';
+import { NextApiResponse } from 'next';
+import { createToken, methodNotAllowed, notFound, ok } from 'next-basics';
+import { getWebsite } from 'queries';
+
+export interface ShareRequestQuery {
+ id: string;
+}
+
+export interface ShareResponse {
+ id: string;
+ token: string;
+}
+
+export default async (
+ req: NextApiRequestQueryBody,
+ res: NextApiResponse,
+) => {
+ const { id: shareId } = req.query;
+
+ if (req.method === 'GET') {
+ const website = await getWebsite({ shareId });
+
+ if (website) {
+ const data = { websiteId: website.id };
+ const token = createToken(data, secret());
+
+ return ok(res, { ...data, token });
+ }
+
+ return notFound(res);
+ }
+
+ return methodNotAllowed(res);
+};
diff --git a/pages/api/teams/[id]/index.ts b/pages/api/teams/[id]/index.ts
new file mode 100644
index 00000000..a3ccd0b6
--- /dev/null
+++ b/pages/api/teams/[id]/index.ts
@@ -0,0 +1,61 @@
+import { Team } from '@prisma/client';
+import { NextApiRequestQueryBody } from 'lib/types';
+import { canDeleteTeam, canUpdateTeam, canViewTeam } from 'lib/auth';
+import { useAuth } from 'lib/middleware';
+import { NextApiResponse } from 'next';
+import { methodNotAllowed, ok, unauthorized } from 'next-basics';
+import { deleteTeam, getTeam, updateTeam } from 'queries';
+
+export interface TeamRequestQuery {
+ id: string;
+}
+
+export interface TeamRequestBody {
+ name: string;
+}
+
+export default async (
+ req: NextApiRequestQueryBody,
+ res: NextApiResponse,
+) => {
+ await useAuth(req, res);
+
+ const {
+ user: { id: userId },
+ } = req.auth;
+ const { id: teamId } = req.query;
+
+ if (req.method === 'GET') {
+ if (!(await canViewTeam(userId, teamId))) {
+ return unauthorized(res);
+ }
+
+ const user = await getTeam({ id: teamId });
+
+ return ok(res, user);
+ }
+
+ if (req.method === 'POST') {
+ const { name } = req.body;
+
+ if (!(await canUpdateTeam(userId, teamId))) {
+ return unauthorized(res, 'You must be the owner of this team.');
+ }
+
+ const updated = await updateTeam({ name }, { id: teamId });
+
+ return ok(res, updated);
+ }
+
+ if (req.method === 'DELETE') {
+ if (!(await canDeleteTeam(userId, teamId))) {
+ return unauthorized(res, 'You must be the owner of this team.');
+ }
+
+ await deleteTeam(teamId);
+
+ return ok(res);
+ }
+
+ return methodNotAllowed(res);
+};
diff --git a/pages/api/teams/[id]/users.ts b/pages/api/teams/[id]/users.ts
new file mode 100644
index 00000000..f0e34165
--- /dev/null
+++ b/pages/api/teams/[id]/users.ts
@@ -0,0 +1,70 @@
+import { NextApiRequestQueryBody } from 'lib/types';
+import { canUpdateTeam, canViewTeam } from 'lib/auth';
+import { useAuth } from 'lib/middleware';
+import { NextApiResponse } from 'next';
+import { badRequest, methodNotAllowed, ok, unauthorized } from 'next-basics';
+import { createTeamUser, deleteTeamUser, getUser, getTeamUsers } from 'queries';
+
+export interface TeamUserRequestQuery {
+ id: string;
+}
+
+export interface TeamUserRequestBody {
+ email: string;
+ role_id: string;
+ team_user_id?: string;
+}
+
+export default async (
+ req: NextApiRequestQueryBody,
+ res: NextApiResponse,
+) => {
+ await useAuth(req, res);
+
+ const {
+ user: { id: userId },
+ } = req.auth;
+ const { id: teamId } = req.query;
+
+ if (req.method === 'GET') {
+ if (!(await canViewTeam(userId, teamId))) {
+ return unauthorized(res);
+ }
+
+ const users = await getTeamUsers(teamId);
+
+ return ok(res, users);
+ }
+
+ if (req.method === 'POST') {
+ if (!(await canUpdateTeam(userId, teamId))) {
+ return unauthorized(res, 'You must be the owner of this team.');
+ }
+
+ const { email, role_id: roleId } = req.body;
+
+ // Check for User
+ const user = await getUser({ username: email });
+
+ if (!user) {
+ return badRequest(res, 'The User does not exists.');
+ }
+
+ const updated = await createTeamUser(user.id, teamId, roleId);
+
+ return ok(res, updated);
+ }
+
+ if (req.method === 'DELETE') {
+ if (await canUpdateTeam(userId, teamId)) {
+ return unauthorized(res, 'You must be the owner of this team.');
+ }
+ const { team_user_id } = req.body;
+
+ await deleteTeamUser(team_user_id);
+
+ return ok(res);
+ }
+
+ return methodNotAllowed(res);
+};
diff --git a/pages/api/teams/[id]/websites.ts b/pages/api/teams/[id]/websites.ts
new file mode 100644
index 00000000..d1f22da8
--- /dev/null
+++ b/pages/api/teams/[id]/websites.ts
@@ -0,0 +1,39 @@
+import { NextApiResponse } from 'next';
+import { methodNotAllowed, ok, unauthorized } from 'next-basics';
+import { NextApiRequestQueryBody } from 'lib/types';
+import { canViewTeam } from 'lib/auth';
+import { useAuth } from 'lib/middleware';
+import { getTeamWebsites } from 'queries/admin/team';
+
+export interface TeamWebsiteRequestQuery {
+ id: string;
+}
+
+export interface TeamWebsiteRequestBody {
+ website_id: string;
+ team_website_id?: string;
+}
+
+export default async (
+ req: NextApiRequestQueryBody,
+ res: NextApiResponse,
+) => {
+ await useAuth(req, res);
+
+ const {
+ user: { id: userId },
+ } = req.auth;
+ const { id: teamId } = req.query;
+
+ if (req.method === 'GET') {
+ if (await canViewTeam(userId, teamId)) {
+ return unauthorized(res);
+ }
+
+ const websites = await getTeamWebsites(teamId);
+
+ return ok(res, websites);
+ }
+
+ return methodNotAllowed(res);
+};
diff --git a/pages/api/teams/index.ts b/pages/api/teams/index.ts
new file mode 100644
index 00000000..46cf65a9
--- /dev/null
+++ b/pages/api/teams/index.ts
@@ -0,0 +1,47 @@
+import { Team } from '@prisma/client';
+import { NextApiRequestQueryBody } from 'lib/types';
+import { canCreateTeam } from 'lib/auth';
+import { uuid } from 'lib/crypto';
+import { useAuth } from 'lib/middleware';
+import { NextApiResponse } from 'next';
+import { methodNotAllowed, ok, unauthorized } from 'next-basics';
+import { createTeam, getUserTeams } from 'queries';
+
+export interface TeamsRequestBody {
+ name: string;
+}
+
+export default async (
+ req: NextApiRequestQueryBody,
+ res: NextApiResponse,
+) => {
+ await useAuth(req, res);
+
+ const {
+ user: { id: userId },
+ } = req.auth;
+
+ if (req.method === 'GET') {
+ const teams = await getUserTeams(userId);
+
+ return ok(res, teams);
+ }
+
+ if (req.method === 'POST') {
+ if (!(await canCreateTeam(userId))) {
+ return unauthorized(res);
+ }
+
+ const { name } = req.body;
+
+ const created = await createTeam({
+ id: uuid(),
+ name,
+ userId,
+ });
+
+ return ok(res, created);
+ }
+
+ return methodNotAllowed(res);
+};
diff --git a/pages/api/users/[id]/index.ts b/pages/api/users/[id]/index.ts
new file mode 100644
index 00000000..bbf2e7cb
--- /dev/null
+++ b/pages/api/users/[id]/index.ts
@@ -0,0 +1,87 @@
+import { NextApiRequestQueryBody } from 'lib/types';
+import { canUpdateUser, canViewUser } from 'lib/auth';
+import { useAuth } from 'lib/middleware';
+import { NextApiResponse } from 'next';
+import { badRequest, hashPassword, methodNotAllowed, ok, unauthorized } from 'next-basics';
+import { deleteUser, getUser, updateUser, User } from 'queries';
+
+export interface UserRequestQuery {
+ id: string;
+}
+
+export interface UserRequestBody {
+ username: string;
+ password: string;
+}
+
+export default async (
+ req: NextApiRequestQueryBody,
+ res: NextApiResponse,
+) => {
+ await useAuth(req, res);
+
+ const {
+ user: { id: userId, isAdmin },
+ } = req.auth;
+ const { id } = req.query;
+
+ if (req.method === 'GET') {
+ if (await canViewUser(userId, id)) {
+ return unauthorized(res);
+ }
+
+ const user = await getUser({ id });
+
+ return ok(res, user);
+ }
+
+ if (req.method === 'POST') {
+ if (await canUpdateUser(userId, id)) {
+ return unauthorized(res);
+ }
+
+ const { username, password } = req.body;
+
+ const user = await getUser({ id });
+
+ const data: any = {};
+
+ if (password) {
+ data.password = hashPassword(password);
+ }
+
+ // Only admin can change these fields
+ if (username && isAdmin) {
+ data.username = username;
+ }
+
+ // Check when username changes
+ if (data.username && user.username !== data.username) {
+ const userByUsername = await getUser({ username });
+
+ if (userByUsername) {
+ return badRequest(res, 'User already exists');
+ }
+ }
+
+ const updated = await updateUser(data, { id });
+
+ return ok(res, updated);
+ }
+
+ if (req.method === 'DELETE') {
+ if (!isAdmin) {
+ return unauthorized(res);
+ }
+
+ if (id === userId) {
+ return badRequest(res, 'You cannot delete your own user.');
+ }
+
+ await deleteUser(id);
+
+ return ok(res);
+ }
+
+ return methodNotAllowed(res);
+};
diff --git a/pages/api/users/[id]/password.ts b/pages/api/users/[id]/password.ts
new file mode 100644
index 00000000..7a37d044
--- /dev/null
+++ b/pages/api/users/[id]/password.ts
@@ -0,0 +1,55 @@
+import { NextApiRequestQueryBody } from 'lib/types';
+import { canUpdateUser } from 'lib/auth';
+import { useAuth } from 'lib/middleware';
+import { NextApiResponse } from 'next';
+import {
+ badRequest,
+ checkPassword,
+ hashPassword,
+ methodNotAllowed,
+ ok,
+ unauthorized,
+} from 'next-basics';
+import { getUser, updateUser, User } from 'queries';
+
+export interface UserPasswordRequestQuery {
+ id: string;
+}
+
+export interface UserPasswordRequestBody {
+ current_password: string;
+ new_password: string;
+}
+
+export default async (
+ req: NextApiRequestQueryBody,
+ res: NextApiResponse,
+) => {
+ await useAuth(req, res);
+
+ const { current_password, new_password } = req.body;
+ const { id } = req.query;
+ const {
+ user: { id: userId },
+ } = req.auth;
+
+ if (req.method === 'POST') {
+ if (canUpdateUser(userId, id)) {
+ return unauthorized(res);
+ }
+
+ const user = await getUser({ id });
+
+ if (!checkPassword(current_password, user.password)) {
+ return badRequest(res, 'Current password is incorrect');
+ }
+
+ const password = hashPassword(new_password);
+
+ const updated = await updateUser({ password }, { id });
+
+ return ok(res, updated);
+ }
+
+ return methodNotAllowed(res);
+};
diff --git a/pages/api/users/[id]/websites.ts b/pages/api/users/[id]/websites.ts
new file mode 100644
index 00000000..bc79f91a
--- /dev/null
+++ b/pages/api/users/[id]/websites.ts
@@ -0,0 +1,57 @@
+import { Prisma } from '@prisma/client';
+import { NextApiRequestQueryBody } from 'lib/types';
+import { uuid } from 'lib/crypto';
+import { useAuth, useCors } from 'lib/middleware';
+import { NextApiResponse } from 'next';
+import { methodNotAllowed, ok } from 'next-basics';
+import { createWebsite, getUserWebsites } from 'queries';
+
+export interface WebsitesRequestQuery {}
+
+export interface WebsitesRequestBody {
+ name: string;
+ domain: string;
+ shareId: string;
+ teamId?: string;
+}
+
+export default async (
+ req: NextApiRequestQueryBody,
+ res: NextApiResponse,
+) => {
+ await useCors(req, res);
+ await useAuth(req, res);
+
+ const {
+ user: { id: userId },
+ } = req.auth;
+
+ if (req.method === 'GET') {
+ const websites = await getUserWebsites(userId);
+
+ return ok(res, websites);
+ }
+
+ if (req.method === 'POST') {
+ const { name, domain, shareId, teamId } = req.body;
+
+ const data: Prisma.WebsiteUncheckedCreateInput = {
+ id: uuid(),
+ name,
+ domain,
+ shareId,
+ };
+
+ if (teamId) {
+ data.teamId = teamId;
+ } else {
+ data.userId = userId;
+ }
+
+ const website = await createWebsite(data);
+
+ return ok(res, website);
+ }
+
+ return methodNotAllowed(res);
+};
diff --git a/pages/api/users/index.ts b/pages/api/users/index.ts
new file mode 100644
index 00000000..4abe4353
--- /dev/null
+++ b/pages/api/users/index.ts
@@ -0,0 +1,59 @@
+import { NextApiRequestQueryBody } from 'lib/types';
+import { uuid } from 'lib/crypto';
+import { useAuth } from 'lib/middleware';
+import { ROLES } from 'lib/constants';
+import { NextApiResponse } from 'next';
+import { badRequest, hashPassword, methodNotAllowed, ok, unauthorized } from 'next-basics';
+import { createUser, getUser, getUsers, User } from 'queries';
+
+export interface UsersRequestBody {
+ username: string;
+ password: string;
+ id: string;
+}
+
+export default async (
+ req: NextApiRequestQueryBody,
+ res: NextApiResponse,
+) => {
+ await useAuth(req, res);
+
+ const {
+ user: { isAdmin },
+ } = req.auth;
+
+ if (req.method === 'GET') {
+ if (!isAdmin) {
+ return unauthorized(res);
+ }
+
+ const users = await getUsers();
+
+ return ok(res, users);
+ }
+
+ if (req.method === 'POST') {
+ if (!isAdmin) {
+ return unauthorized(res);
+ }
+
+ const { username, password, id } = req.body;
+
+ const existingUser = await getUser({ username });
+
+ if (existingUser) {
+ return badRequest(res, 'User already exists');
+ }
+
+ const created = await createUser({
+ id: id || uuid(),
+ username,
+ password: hashPassword(password),
+ role: ROLES.user,
+ });
+
+ return ok(res, created);
+ }
+
+ return methodNotAllowed(res);
+};
diff --git a/pages/api/websites/[id]/active.js b/pages/api/websites/[id]/active.js
deleted file mode 100644
index 20550427..00000000
--- a/pages/api/websites/[id]/active.js
+++ /dev/null
@@ -1,24 +0,0 @@
-import { methodNotAllowed, ok, unauthorized } from 'next-basics';
-import { allowQuery } from 'lib/auth';
-import { useCors } from 'lib/middleware';
-import { getActiveVisitors } from 'queries';
-
-export default async (req, res) => {
- if (req.method === 'GET') {
- await useCors(req, res);
-
- if (!(await allowQuery(req))) {
- return unauthorized(res);
- }
-
- const { id } = req.query;
-
- const websiteId = +id;
-
- const result = await getActiveVisitors(websiteId);
-
- return ok(res, result);
- }
-
- return methodNotAllowed(res);
-};
diff --git a/pages/api/websites/[id]/active.ts b/pages/api/websites/[id]/active.ts
new file mode 100644
index 00000000..a293b637
--- /dev/null
+++ b/pages/api/websites/[id]/active.ts
@@ -0,0 +1,37 @@
+import { NextApiRequestQueryBody, WebsiteActive } from 'lib/types';
+import { canViewWebsite } from 'lib/auth';
+import { useAuth, useCors } from 'lib/middleware';
+import { NextApiResponse } from 'next';
+import { methodNotAllowed, ok, unauthorized } from 'next-basics';
+import { getActiveVisitors } from 'queries';
+
+export interface WebsiteActiveRequestQuery {
+ id: string;
+}
+
+export default async (
+ req: NextApiRequestQueryBody,
+ res: NextApiResponse,
+) => {
+ await useCors(req, res);
+ await useAuth(req, res);
+
+ const { user, shareToken } = req.auth;
+ const userId = user?.id;
+ const websiteId = req.query.id;
+ const shared = shareToken?.websiteId === websiteId;
+
+ if (req.method === 'GET') {
+ const canView = await canViewWebsite(userId, websiteId);
+
+ if (!canView && !shared) {
+ return unauthorized(res);
+ }
+
+ const result = await getActiveVisitors(websiteId);
+
+ return ok(res, result);
+ }
+
+ return methodNotAllowed(res);
+};
diff --git a/pages/api/websites/[id]/eventdata.ts b/pages/api/websites/[id]/eventdata.ts
new file mode 100644
index 00000000..8ceb0abc
--- /dev/null
+++ b/pages/api/websites/[id]/eventdata.ts
@@ -0,0 +1,56 @@
+import { WebsiteMetric, NextApiRequestQueryBody } from 'lib/types';
+import { canViewWebsite } from 'lib/auth';
+import { useAuth, useCors } from 'lib/middleware';
+import { NextApiResponse } from 'next';
+import { methodNotAllowed, ok, unauthorized } from 'next-basics';
+import { getEventData } from 'queries';
+
+export interface WebsiteEventDataRequestQuery {
+ id: string;
+}
+
+export interface WebsiteEventDataRequestBody {
+ start_at: string;
+ end_at: string;
+ event_name: string;
+ columns: { [key: string]: 'count' | 'max' | 'min' | 'avg' | 'sum' };
+ filters?: { [key: string]: any };
+}
+
+export default async (
+ req: NextApiRequestQueryBody,
+ res: NextApiResponse,
+) => {
+ await useCors(req, res);
+ await useAuth(req, res);
+
+ const {
+ user: { id: userId },
+ } = req.auth;
+ const { id: websiteId } = req.query;
+
+ if (req.method === 'POST') {
+ const canView = canViewWebsite(userId, websiteId);
+
+ if (!canView) {
+ return unauthorized(res);
+ }
+
+ const { start_at, end_at, event_name: eventName, columns, filters } = req.body;
+
+ const startDate = new Date(+start_at);
+ const endDate = new Date(+end_at);
+
+ const events = await getEventData(websiteId, {
+ startDate,
+ endDate,
+ eventName,
+ columns,
+ filters,
+ });
+
+ return ok(res, events);
+ }
+
+ return methodNotAllowed(res);
+};
diff --git a/pages/api/websites/[id]/events.js b/pages/api/websites/[id]/events.js
deleted file mode 100644
index c633a585..00000000
--- a/pages/api/websites/[id]/events.js
+++ /dev/null
@@ -1,36 +0,0 @@
-import moment from 'moment-timezone';
-import { getEventMetrics } from 'queries';
-import { ok, badRequest, methodNotAllowed, unauthorized } from 'next-basics';
-import { allowQuery } from 'lib/auth';
-import { useCors } from 'lib/middleware';
-
-const unitTypes = ['year', 'month', 'hour', 'day'];
-
-export default async (req, res) => {
- if (req.method === 'GET') {
- await useCors(req, res);
-
- if (!(await allowQuery(req))) {
- return unauthorized(res);
- }
-
- const { id, start_at, end_at, unit, tz, url, event_name } = req.query;
-
- if (!moment.tz.zone(tz) || !unitTypes.includes(unit)) {
- return badRequest(res);
- }
-
- const websiteId = +id;
- const startDate = new Date(+start_at);
- const endDate = new Date(+end_at);
-
- const events = await getEventMetrics(websiteId, startDate, endDate, tz, unit, {
- url,
- event_name,
- });
-
- return ok(res, events);
- }
-
- return methodNotAllowed(res);
-};
diff --git a/pages/api/websites/[id]/events.ts b/pages/api/websites/[id]/events.ts
new file mode 100644
index 00000000..d328c83d
--- /dev/null
+++ b/pages/api/websites/[id]/events.ts
@@ -0,0 +1,61 @@
+import { WebsiteMetric, NextApiRequestQueryBody } from 'lib/types';
+import { canViewWebsite } from 'lib/auth';
+import { useAuth, useCors } from 'lib/middleware';
+import moment from 'moment-timezone';
+import { NextApiResponse } from 'next';
+import { badRequest, methodNotAllowed, ok, unauthorized } from 'next-basics';
+import { getEventMetrics } from 'queries';
+
+const unitTypes = ['year', 'month', 'hour', 'day'];
+
+export interface WebsiteEventsRequestQuery {
+ id: string;
+ start_at: string;
+ end_at: string;
+ unit: string;
+ tz: string;
+ url: string;
+ event_name: string;
+}
+
+export default async (
+ req: NextApiRequestQueryBody,
+ res: NextApiResponse,
+) => {
+ await useCors(req, res);
+ await useAuth(req, res);
+
+ const { id: websiteId, start_at, end_at, unit, tz, url, event_name } = req.query;
+ const { user, shareToken } = req.auth;
+ const userId = user?.id;
+ const shared = shareToken?.websiteId === websiteId;
+
+ if (req.method === 'GET') {
+ const canView = canViewWebsite(userId, websiteId);
+
+ if (!canView && !shared) {
+ return unauthorized(res);
+ }
+
+ if (!moment.tz.zone(tz) || !unitTypes.includes(unit)) {
+ return badRequest(res);
+ }
+ const startDate = new Date(+start_at);
+ const endDate = new Date(+end_at);
+
+ const events = await getEventMetrics(websiteId, {
+ startDate,
+ endDate,
+ timezone: tz,
+ unit,
+ filters: {
+ url,
+ eventName: event_name,
+ },
+ });
+
+ return ok(res, events);
+ }
+
+ return methodNotAllowed(res);
+};
diff --git a/pages/api/websites/[id]/index.js b/pages/api/websites/[id]/index.js
deleted file mode 100644
index bc9cb17f..00000000
--- a/pages/api/websites/[id]/index.js
+++ /dev/null
@@ -1,59 +0,0 @@
-import { getRandomChars, methodNotAllowed, ok, unauthorized } from 'next-basics';
-import { deleteWebsite, getWebsiteById, updateWebsite } from 'queries';
-import { allowQuery } from 'lib/auth';
-import { useAuth, useCors } from 'lib/middleware';
-
-export default async (req, res) => {
- const { id } = req.query;
-
- const websiteId = +id;
-
- if (req.method === 'GET') {
- await useCors(req, res);
-
- if (!(await allowQuery(req))) {
- return unauthorized(res);
- }
-
- const website = await getWebsiteById(websiteId);
-
- return ok(res, website);
- }
-
- if (req.method === 'POST') {
- await useAuth(req, res);
-
- const { is_admin: currentUserIsAdmin, user_id: currentUserId } = req.auth;
- const { name, domain, owner, enable_share_url } = req.body;
-
- const website = await getWebsiteById(websiteId);
-
- if (website.user_id !== currentUserId && !currentUserIsAdmin) {
- return unauthorized(res);
- }
-
- let { share_id } = website;
-
- if (enable_share_url) {
- share_id = share_id ? share_id : getRandomChars(8);
- } else {
- share_id = null;
- }
-
- await updateWebsite(websiteId, { name, domain, share_id, user_id: +owner });
-
- return ok(res);
- }
-
- if (req.method === 'DELETE') {
- if (!(await allowQuery(req, true))) {
- return unauthorized(res);
- }
-
- await deleteWebsite(websiteId);
-
- return ok(res);
- }
-
- return methodNotAllowed(res);
-};
diff --git a/pages/api/websites/[id]/index.ts b/pages/api/websites/[id]/index.ts
new file mode 100644
index 00000000..0a0fa662
--- /dev/null
+++ b/pages/api/websites/[id]/index.ts
@@ -0,0 +1,75 @@
+import { Website, NextApiRequestQueryBody } from 'lib/types';
+import { canViewWebsite, canUpdateWebsite, canDeleteWebsite } from 'lib/auth';
+import { useAuth, useCors } from 'lib/middleware';
+import { NextApiResponse } from 'next';
+import { methodNotAllowed, ok, serverError, unauthorized } from 'next-basics';
+import { deleteWebsite, getWebsite, updateWebsite } from 'queries';
+
+export interface WebsiteRequestQuery {
+ id: string;
+}
+
+export interface WebsiteRequestBody {
+ name: string;
+ domain: string;
+ shareId: string;
+}
+
+export default async (
+ req: NextApiRequestQueryBody,
+ res: NextApiResponse,
+) => {
+ await useCors(req, res);
+ await useAuth(req, res);
+
+ const { user, shareToken } = req.auth;
+ const userId = user?.id;
+ const websiteId = req.query.id;
+ const shared = shareToken?.websiteId === websiteId;
+
+ if (req.method === 'GET') {
+ const canView = await canViewWebsite(userId, websiteId);
+
+ if (!canView && !shared) {
+ return unauthorized(res);
+ }
+
+ const website = await getWebsite({ id: websiteId });
+
+ return ok(res, website);
+ }
+
+ if (req.method === 'POST') {
+ const canUpdate = await canUpdateWebsite(userId, websiteId);
+
+ if (!canUpdate) {
+ return unauthorized(res);
+ }
+
+ const { name, domain, shareId } = req.body;
+
+ try {
+ await updateWebsite(websiteId, { name, domain, shareId });
+ } catch (e: any) {
+ if (e.message.includes('Unique constraint') && e.message.includes('share_id')) {
+ return serverError(res, 'That share ID is already taken.');
+ }
+ }
+
+ return ok(res);
+ }
+
+ if (req.method === 'DELETE') {
+ const canDelete = await canDeleteWebsite(userId, websiteId);
+
+ if (!canDelete) {
+ return unauthorized(res);
+ }
+
+ await deleteWebsite(websiteId);
+
+ return ok(res);
+ }
+
+ return methodNotAllowed(res);
+};
diff --git a/pages/api/websites/[id]/metrics.js b/pages/api/websites/[id]/metrics.ts
similarity index 67%
rename from pages/api/websites/[id]/metrics.js
rename to pages/api/websites/[id]/metrics.ts
index 206209c6..7eb364a1 100644
--- a/pages/api/websites/[id]/metrics.js
+++ b/pages/api/websites/[id]/metrics.ts
@@ -1,8 +1,10 @@
-import { getPageviewMetrics, getSessionMetrics, getWebsiteById } from 'queries';
-import { ok, methodNotAllowed, unauthorized, badRequest } from 'next-basics';
-import { allowQuery } from 'lib/auth';
-import { useCors } from 'lib/middleware';
+import { WebsiteMetric, NextApiRequestQueryBody } from 'lib/types';
+import { canViewWebsite } from 'lib/auth';
import { FILTER_IGNORED } from 'lib/constants';
+import { useAuth, useCors } from 'lib/middleware';
+import { NextApiResponse } from 'next';
+import { badRequest, methodNotAllowed, ok, unauthorized } from 'next-basics';
+import { getPageviewMetrics, getSessionMetrics, getWebsite } from 'queries';
const sessionColumns = ['browser', 'os', 'device', 'screen', 'country', 'language'];
const pageviewColumns = ['url', 'referrer', 'query'];
@@ -33,17 +35,49 @@ function getColumn(type) {
return type;
}
-export default async (req, res) => {
- if (req.method === 'GET') {
- await useCors(req, res);
+export interface WebsiteMetricsRequestQuery {
+ id: string;
+ type: string;
+ start_at: number;
+ end_at: number;
+ url: string;
+ referrer: string;
+ os: string;
+ browser: string;
+ device: string;
+ country: string;
+}
- if (!(await allowQuery(req))) {
+export default async (
+ req: NextApiRequestQueryBody,
+ res: NextApiResponse,
+) => {
+ await useCors(req, res);
+ await useAuth(req, res);
+
+ const {
+ id: websiteId,
+ type,
+ start_at,
+ end_at,
+ url,
+ referrer,
+ os,
+ browser,
+ device,
+ country,
+ } = req.query;
+ const { user, shareToken } = req.auth;
+ const userId = user?.id;
+ const shared = shareToken?.websiteId === websiteId;
+
+ if (req.method === 'GET') {
+ const canView = await canViewWebsite(userId, websiteId);
+
+ if (!canView && !shared) {
return unauthorized(res);
}
- const { id, type, start_at, end_at, url, referrer, os, browser, device, country } = req.query;
-
- const websiteId = +id;
const startDate = new Date(+start_at);
const endDate = new Date(+end_at);
@@ -83,7 +117,7 @@ export default async (req, res) => {
let domain;
if (type === 'referrer') {
- const website = await getWebsiteById(websiteId);
+ const website = await getWebsite({ id: websiteId });
if (!website) {
return badRequest(res);
diff --git a/pages/api/websites/[id]/pageviews.js b/pages/api/websites/[id]/pageviews.js
deleted file mode 100644
index f00fffa1..00000000
--- a/pages/api/websites/[id]/pageviews.js
+++ /dev/null
@@ -1,64 +0,0 @@
-import moment from 'moment-timezone';
-import { getPageviewStats } from 'queries';
-import { ok, badRequest, methodNotAllowed, unauthorized } from 'next-basics';
-import { allowQuery } from 'lib/auth';
-import { useCors } from 'lib/middleware';
-
-const unitTypes = ['year', 'month', 'hour', 'day'];
-
-export default async (req, res) => {
- if (req.method === 'GET') {
- await useCors(req, res);
-
- if (!(await allowQuery(req))) {
- return unauthorized(res);
- }
-
- const { id, start_at, end_at, unit, tz, url, referrer, os, browser, device, country } =
- req.query;
-
- const websiteId = +id;
- const startDate = new Date(+start_at);
- const endDate = new Date(+end_at);
-
- if (!moment.tz.zone(tz) || !unitTypes.includes(unit)) {
- return badRequest(res);
- }
-
- const [pageviews, sessions] = await Promise.all([
- getPageviewStats(websiteId, {
- start_at: startDate,
- end_at: endDate,
- timezone: tz,
- unit,
- count: '*',
- filters: {
- url,
- referrer,
- os,
- browser,
- device,
- country,
- },
- }),
- getPageviewStats(websiteId, {
- start_at: startDate,
- end_at: endDate,
- timezone: tz,
- unit,
- count: 'distinct pageview.',
- filters: {
- url,
- os,
- browser,
- device,
- country,
- },
- }),
- ]);
-
- return ok(res, { pageviews, sessions });
- }
-
- return methodNotAllowed(res);
-};
diff --git a/pages/api/websites/[id]/pageviews.ts b/pages/api/websites/[id]/pageviews.ts
new file mode 100644
index 00000000..bbb3701e
--- /dev/null
+++ b/pages/api/websites/[id]/pageviews.ts
@@ -0,0 +1,100 @@
+import { NextApiRequestQueryBody, WebsitePageviews } from 'lib/types';
+import { canViewWebsite } from 'lib/auth';
+import { useAuth, useCors } from 'lib/middleware';
+import moment from 'moment-timezone';
+import { NextApiResponse } from 'next';
+import { badRequest, methodNotAllowed, ok, unauthorized } from 'next-basics';
+import { getPageviewStats } from 'queries';
+
+const unitTypes = ['year', 'month', 'hour', 'day'];
+
+export interface WebsitePageviewRequestQuery {
+ id: string;
+ websiteId: string;
+ start_at: number;
+ end_at: number;
+ unit: string;
+ tz: string;
+ url?: string;
+ referrer?: string;
+ os?: string;
+ browser?: string;
+ device?: string;
+ country?: string;
+}
+
+export default async (
+ req: NextApiRequestQueryBody,
+ res: NextApiResponse,
+) => {
+ await useCors(req, res);
+ await useAuth(req, res);
+
+ const {
+ id: websiteId,
+ start_at,
+ end_at,
+ unit,
+ tz,
+ url,
+ referrer,
+ os,
+ browser,
+ device,
+ country,
+ } = req.query;
+ const { user, shareToken } = req.auth;
+ const userId = user?.id;
+ const shared = shareToken?.websiteId === websiteId;
+
+ if (req.method === 'GET') {
+ const canView = await canViewWebsite(userId, websiteId);
+
+ if (!canView && !shared) {
+ return unauthorized(res);
+ }
+
+ const startDate = new Date(+start_at);
+ const endDate = new Date(+end_at);
+
+ if (!moment.tz.zone(tz) || !unitTypes.includes(unit)) {
+ return badRequest(res);
+ }
+
+ const [pageviews, sessions] = await Promise.all([
+ getPageviewStats(websiteId, {
+ startDate,
+ endDate,
+ timezone: tz,
+ unit,
+ count: '*',
+ filters: {
+ url,
+ referrer,
+ os,
+ browser,
+ device,
+ country,
+ },
+ }),
+ getPageviewStats(websiteId, {
+ startDate,
+ endDate,
+ timezone: tz,
+ unit,
+ count: 'distinct website_event.',
+ filters: {
+ url,
+ os,
+ browser,
+ device,
+ country,
+ },
+ }),
+ ]);
+
+ return ok(res, { pageviews, sessions });
+ }
+
+ return methodNotAllowed(res);
+};
diff --git a/pages/api/websites/[id]/reset.js b/pages/api/websites/[id]/reset.js
deleted file mode 100644
index 2f5d05b4..00000000
--- a/pages/api/websites/[id]/reset.js
+++ /dev/null
@@ -1,20 +0,0 @@
-import { resetWebsite } from 'queries';
-import { methodNotAllowed, ok, unauthorized } from 'next-basics';
-import { allowQuery } from 'lib/auth';
-
-export default async (req, res) => {
- const { id } = req.query;
- const websiteId = +id;
-
- if (req.method === 'POST') {
- if (!(await allowQuery(req))) {
- return unauthorized(res);
- }
-
- await resetWebsite(websiteId);
-
- return ok(res);
- }
-
- return methodNotAllowed(res);
-};
diff --git a/pages/api/websites/[id]/reset.ts b/pages/api/websites/[id]/reset.ts
new file mode 100644
index 00000000..70f5618a
--- /dev/null
+++ b/pages/api/websites/[id]/reset.ts
@@ -0,0 +1,37 @@
+import { NextApiRequestQueryBody } from 'lib/types';
+import { canUpdateWebsite } from 'lib/auth';
+import { useAuth, useCors } from 'lib/middleware';
+import { NextApiResponse } from 'next';
+import { methodNotAllowed, ok, unauthorized } from 'next-basics';
+import { resetWebsite } from 'queries';
+
+export interface WebsiteResetRequestQuery {
+ id: string;
+}
+
+export default async (
+ req: NextApiRequestQueryBody,
+ res: NextApiResponse,
+) => {
+ await useCors(req, res);
+ await useAuth(req, res);
+
+ const {
+ user: { id: userId },
+ } = req.auth;
+ const { id: websiteId } = req.query;
+
+ if (req.method === 'POST') {
+ const canUpdate = await canUpdateWebsite(userId, websiteId);
+
+ if (!canUpdate) {
+ return unauthorized(res);
+ }
+
+ await resetWebsite(websiteId);
+
+ return ok(res);
+ }
+
+ return methodNotAllowed(res);
+};
diff --git a/pages/api/websites/[id]/stats.js b/pages/api/websites/[id]/stats.ts
similarity index 51%
rename from pages/api/websites/[id]/stats.js
rename to pages/api/websites/[id]/stats.ts
index a7741af5..c5b9bbf1 100644
--- a/pages/api/websites/[id]/stats.js
+++ b/pages/api/websites/[id]/stats.ts
@@ -1,19 +1,52 @@
-import { getWebsiteStats } from 'queries';
+import { NextApiRequestQueryBody, WebsiteStats } from 'lib/types';
+import { canViewWebsite } from 'lib/auth';
+import { useAuth, useCors } from 'lib/middleware';
+import { NextApiResponse } from 'next';
import { methodNotAllowed, ok, unauthorized } from 'next-basics';
-import { allowQuery } from 'lib/auth';
-import { useCors } from 'lib/middleware';
+import { getWebsiteStats } from 'queries';
+
+export interface WebsiteStatsRequestQuery {
+ id: string;
+ type: string;
+ start_at: number;
+ end_at: number;
+ url: string;
+ referrer: string;
+ os: string;
+ browser: string;
+ device: string;
+ country: string;
+}
+
+export default async (
+ req: NextApiRequestQueryBody,
+ res: NextApiResponse,
+) => {
+ await useCors(req, res);
+ await useAuth(req, res);
+
+ const {
+ id: websiteId,
+ start_at,
+ end_at,
+ url,
+ referrer,
+ os,
+ browser,
+ device,
+ country,
+ } = req.query;
+ const { user, shareToken } = req.auth;
+ const userId = user?.id;
+ const shared = shareToken?.websiteId === websiteId;
-export default async (req, res) => {
if (req.method === 'GET') {
- await useCors(req, res);
+ const canView = await canViewWebsite(userId, websiteId);
- if (!(await allowQuery(req))) {
+ if (!canView && !shared) {
return unauthorized(res);
}
- const { id, start_at, end_at, url, referrer, os, browser, device, country } = req.query;
-
- const websiteId = +id;
const startDate = new Date(+start_at);
const endDate = new Date(+end_at);
@@ -22,8 +55,8 @@ export default async (req, res) => {
const prevEndDate = new Date(+end_at - distance);
const metrics = await getWebsiteStats(websiteId, {
- start_at: startDate,
- end_at: endDate,
+ startDate,
+ endDate,
filters: {
url,
referrer,
@@ -34,8 +67,8 @@ export default async (req, res) => {
},
});
const prevPeriod = await getWebsiteStats(websiteId, {
- start_at: prevStartDate,
- end_at: prevEndDate,
+ startDate: prevStartDate,
+ endDate: prevEndDate,
filters: {
url,
referrer,
diff --git a/pages/api/websites/index.js b/pages/api/websites/index.js
deleted file mode 100644
index 65a078d1..00000000
--- a/pages/api/websites/index.js
+++ /dev/null
@@ -1,52 +0,0 @@
-import { createWebsite, getAccount, getAllWebsites, getUserWebsites } from 'queries';
-import { ok, methodNotAllowed, unauthorized, getRandomChars } from 'next-basics';
-import { useAuth } from 'lib/middleware';
-import { uuid } from 'lib/crypto';
-
-export default async (req, res) => {
- await useAuth(req, res);
-
- const { user_id: current_user_id, is_admin, account_uuid } = req.auth;
- const { user_id, include_all } = req.query;
- let account;
-
- if (account_uuid) {
- account = await getAccount({ account_uuid });
- }
-
- const userId = account ? account.user_id : +user_id;
-
- if (req.method === 'GET') {
- if (userId && userId !== current_user_id && !is_admin) {
- return unauthorized(res);
- }
-
- const websites =
- is_admin && include_all
- ? await getAllWebsites()
- : await getUserWebsites(userId || current_user_id);
-
- return ok(res, websites);
- }
-
- if (req.method === 'POST') {
- await useAuth(req, res);
-
- const { is_admin: currentUserIsAdmin, user_id: currentUserId } = req.auth;
- const { name, domain, owner, enable_share_url } = req.body;
-
- const website_owner = account ? account.user_id : +owner;
-
- if (website_owner !== currentUserId && !currentUserIsAdmin) {
- return unauthorized(res);
- }
-
- const website_uuid = uuid();
- const share_id = enable_share_url ? getRandomChars(8) : null;
- const website = await createWebsite(website_owner, { website_uuid, name, domain, share_id });
-
- return ok(res, website);
- }
-
- return methodNotAllowed(res);
-};
diff --git a/pages/api/websites/index.ts b/pages/api/websites/index.ts
new file mode 100644
index 00000000..bc79f91a
--- /dev/null
+++ b/pages/api/websites/index.ts
@@ -0,0 +1,57 @@
+import { Prisma } from '@prisma/client';
+import { NextApiRequestQueryBody } from 'lib/types';
+import { uuid } from 'lib/crypto';
+import { useAuth, useCors } from 'lib/middleware';
+import { NextApiResponse } from 'next';
+import { methodNotAllowed, ok } from 'next-basics';
+import { createWebsite, getUserWebsites } from 'queries';
+
+export interface WebsitesRequestQuery {}
+
+export interface WebsitesRequestBody {
+ name: string;
+ domain: string;
+ shareId: string;
+ teamId?: string;
+}
+
+export default async (
+ req: NextApiRequestQueryBody,
+ res: NextApiResponse,
+) => {
+ await useCors(req, res);
+ await useAuth(req, res);
+
+ const {
+ user: { id: userId },
+ } = req.auth;
+
+ if (req.method === 'GET') {
+ const websites = await getUserWebsites(userId);
+
+ return ok(res, websites);
+ }
+
+ if (req.method === 'POST') {
+ const { name, domain, shareId, teamId } = req.body;
+
+ const data: Prisma.WebsiteUncheckedCreateInput = {
+ id: uuid(),
+ name,
+ domain,
+ shareId,
+ };
+
+ if (teamId) {
+ data.teamId = teamId;
+ } else {
+ data.userId = userId;
+ }
+
+ const website = await createWebsite(data);
+
+ return ok(res, website);
+ }
+
+ return methodNotAllowed(res);
+};
diff --git a/pages/console/[[...id]].js b/pages/console/[[...id]].js
index 9028303c..270a81df 100644
--- a/pages/console/[[...id]].js
+++ b/pages/console/[[...id]].js
@@ -4,11 +4,11 @@ import TestConsole from 'components/pages/TestConsole';
import useRequireLogin from 'hooks/useRequireLogin';
import useUser from 'hooks/useUser';
-export default function ConsolePage({ enabled }) {
+export default function ConsolePage({ pageDisabled }) {
const { loading } = useRequireLogin();
const { user } = useUser();
- if (loading || !enabled || !user?.is_admin) {
+ if (pageDisabled || loading || !user?.isAdmin) {
return null;
}
@@ -21,6 +21,8 @@ export default function ConsolePage({ enabled }) {
export async function getServerSideProps() {
return {
- props: { enabled: !!process.env.ENABLE_TEST_CONSOLE },
+ props: {
+ pageDisabled: !process.env.ENABLE_TEST_CONSOLE,
+ },
};
}
diff --git a/pages/dashboard/[[...id]].js b/pages/dashboard/[[...id]].js
index 452a425e..c9ef6231 100644
--- a/pages/dashboard/[[...id]].js
+++ b/pages/dashboard/[[...id]].js
@@ -1,18 +1,30 @@
import React from 'react';
+import { useRouter } from 'next/router';
import Layout from 'components/layout/Layout';
import Dashboard from 'components/pages/Dashboard';
import useRequireLogin from 'hooks/useRequireLogin';
+import useUser from 'hooks/useUser';
+import useConfig from 'hooks/useConfig';
export default function DashboardPage() {
+ const {
+ query: { id },
+ isReady,
+ asPath,
+ } = useRouter();
const { loading } = useRequireLogin();
+ const user = useUser();
+ const { adminDisabled } = useConfig();
- if (loading) {
+ if (adminDisabled || !user || !isReady || loading) {
return null;
}
+ const userId = id?.[0];
+
return (
-
+
);
}
diff --git a/pages/login.js b/pages/login.js
index 4856a772..fb2fcb21 100644
--- a/pages/login.js
+++ b/pages/login.js
@@ -2,8 +2,8 @@ import React from 'react';
import Layout from 'components/layout/Layout';
import LoginForm from 'components/forms/LoginForm';
-export default function LoginPage({ loginDisabled }) {
- if (loginDisabled) {
+export default function LoginPage({ pageDisabled }) {
+ if (pageDisabled) {
return null;
}
@@ -16,6 +16,8 @@ export default function LoginPage({ loginDisabled }) {
export async function getServerSideProps() {
return {
- props: { loginDisabled: !!process.env.DISABLE_LOGIN },
+ props: {
+ pageDisabled: !!process.env.DISABLE_LOGIN,
+ },
};
}
diff --git a/pages/logout.js b/pages/logout.js
index bcc99a10..a91205a4 100644
--- a/pages/logout.js
+++ b/pages/logout.js
@@ -1,14 +1,22 @@
import { useEffect } from 'react';
import { useRouter } from 'next/router';
-import { removeItem } from 'next-basics';
+import { removeItem, useApi } from 'next-basics';
import { AUTH_TOKEN } from 'lib/constants';
import { setUser } from 'store/app';
export default function LogoutPage() {
const router = useRouter();
+ const { post } = useApi();
useEffect(() => {
+ async function logout() {
+ await post('/logout');
+ }
+
removeItem(AUTH_TOKEN);
+
+ logout();
+
router.push('/login');
return () => setUser(null);
diff --git a/pages/settings/index.js b/pages/settings/index.js
index b4bb2248..02e89cea 100644
--- a/pages/settings/index.js
+++ b/pages/settings/index.js
@@ -2,11 +2,13 @@ import React from 'react';
import Layout from 'components/layout/Layout';
import Settings from 'components/pages/Settings';
import useRequireLogin from 'hooks/useRequireLogin';
+import useConfig from 'hooks/useConfig';
export default function SettingsPage() {
const { loading } = useRequireLogin();
+ const { adminDisabled } = useConfig();
- if (loading) {
+ if (adminDisabled || loading) {
return null;
}
diff --git a/pages/settings/accounts.js b/pages/settings/users.js
similarity index 100%
rename from pages/settings/accounts.js
rename to pages/settings/users.js
diff --git a/pages/share/[...id].js b/pages/share/[...id].js
index ff5e4a6e..e46c6af2 100644
--- a/pages/share/[...id].js
+++ b/pages/share/[...id].js
@@ -14,11 +14,9 @@ export default function SharePage() {
return null;
}
- const { websiteId } = shareToken;
-
return (
-
+
);
}
diff --git a/pages/sso.js b/pages/sso.js
new file mode 100644
index 00000000..17ffa6b8
--- /dev/null
+++ b/pages/sso.js
@@ -0,0 +1,19 @@
+import { useEffect } from 'react';
+import { useRouter } from 'next/router';
+import { setItem } from 'next-basics';
+import { AUTH_TOKEN } from 'lib/constants';
+
+export default function SingleSignOnPage() {
+ const router = useRouter();
+ const { token, url } = router.query;
+
+ useEffect(() => {
+ if (url && token) {
+ setItem(AUTH_TOKEN, token);
+
+ router.push(url);
+ }
+ }, [router, url, token]);
+
+ return null;
+}
diff --git a/pages/website/[...id].js b/pages/websites/[...id].js
similarity index 100%
rename from pages/website/[...id].js
rename to pages/websites/[...id].js
diff --git a/public/intl/messages/en-US.json b/public/intl/messages/en-US.json
index ecb654d1..d1ff296c 100644
--- a/public/intl/messages/en-US.json
+++ b/public/intl/messages/en-US.json
@@ -11,6 +11,18 @@
"value": "Add account"
}
],
+ "label.add-column": [
+ {
+ "type": 0,
+ "value": "Add column"
+ }
+ ],
+ "label.add-filter": [
+ {
+ "type": 0,
+ "value": "Add filter"
+ }
+ ],
"label.add-website": [
{
"type": 0,
@@ -155,6 +167,18 @@
"value": "Enable share URL"
}
],
+ "label.event-data": [
+ {
+ "type": 0,
+ "value": "Event Data"
+ }
+ ],
+ "label.field-name": [
+ {
+ "type": 0,
+ "value": "Field Name"
+ }
+ ],
"label.invalid": [
{
"type": 0,
@@ -313,6 +337,12 @@
"value": "Save"
}
],
+ "label.search": [
+ {
+ "type": 0,
+ "value": "Search"
+ }
+ ],
"label.settings": [
{
"type": 0,
@@ -373,6 +403,12 @@
"value": "Tracking code"
}
],
+ "label.type": [
+ {
+ "type": 0,
+ "value": "Type"
+ }
+ ],
"label.unknown": [
{
"type": 0,
@@ -385,6 +421,12 @@
"value": "Username"
}
],
+ "label.value": [
+ {
+ "type": 0,
+ "value": "Value"
+ }
+ ],
"label.view-details": [
{
"type": 0,
diff --git a/public/intl/messages/pl-PL.json b/public/intl/messages/pl-PL.json
index 565b79b1..fcc7a2c9 100644
--- a/public/intl/messages/pl-PL.json
+++ b/public/intl/messages/pl-PL.json
@@ -11,6 +11,18 @@
"value": "Dodaj konto"
}
],
+ "label.add-column": [
+ {
+ "type": 0,
+ "value": "Dodaj kolumnÄ™"
+ }
+ ],
+ "label.add-filter": [
+ {
+ "type": 0,
+ "value": "Dodaj filtr"
+ }
+ ],
"label.add-website": [
{
"type": 0,
@@ -155,6 +167,18 @@
"value": "Włącz udostępnianie adresu URL"
}
],
+ "label.event-data": [
+ {
+ "type": 0,
+ "value": "Dane zdarzenia"
+ }
+ ],
+ "label.field-name": [
+ {
+ "type": 0,
+ "value": "Nazwa pola"
+ }
+ ],
"label.invalid": [
{
"type": 0,
@@ -244,7 +268,7 @@
"label.none": [
{
"type": 0,
- "value": "None"
+ "value": "Brak"
}
],
"label.owner": [
@@ -313,6 +337,12 @@
"value": "Zapisz"
}
],
+ "label.search": [
+ {
+ "type": 0,
+ "value": "Szukaj"
+ }
+ ],
"label.settings": [
{
"type": 0,
@@ -373,6 +403,12 @@
"value": "Kod śledzenia"
}
],
+ "label.type": [
+ {
+ "type": 0,
+ "value": "Typ"
+ }
+ ],
"label.unknown": [
{
"type": 0,
@@ -385,6 +421,12 @@
"value": "Nazwa użytkownika"
}
],
+ "label.value": [
+ {
+ "type": 0,
+ "value": "Wartość"
+ }
+ ],
"label.view-details": [
{
"type": 0,
@@ -397,6 +439,12 @@
"value": "Witryny"
}
],
+ "label.yesterday": [
+ {
+ "type": 0,
+ "value": "Wczoraj"
+ }
+ ],
"message.active-users": [
{
"type": 1,
@@ -474,7 +522,7 @@
"message.edit-dashboard": [
{
"type": 0,
- "value": "Edit dashboard"
+ "value": "Edytuj panel"
}
],
"message.failure": [
@@ -770,7 +818,7 @@
"metrics.query-parameters": [
{
"type": 0,
- "value": "Query parameters"
+ "value": "Parametry query"
}
],
"metrics.referrers": [
diff --git a/queries/admin/account/createAccount.js b/queries/admin/account/createAccount.js
deleted file mode 100644
index 2c4e1a40..00000000
--- a/queries/admin/account/createAccount.js
+++ /dev/null
@@ -1,7 +0,0 @@
-import prisma from 'lib/prisma';
-
-export async function createAccount(data) {
- return prisma.client.account.create({
- data,
- });
-}
diff --git a/queries/admin/account/deleteAccount.js b/queries/admin/account/deleteAccount.js
deleted file mode 100644
index 4e204e73..00000000
--- a/queries/admin/account/deleteAccount.js
+++ /dev/null
@@ -1,50 +0,0 @@
-import prisma from 'lib/prisma';
-import redis, { DELETED } from 'lib/redis';
-
-export async function deleteAccount(user_id) {
- const { client } = prisma;
-
- const websites = await client.website.findMany({
- where: { user_id },
- select: { website_uuid: true },
- });
-
- let websiteUuids = [];
-
- if (websites.length > 0) {
- websiteUuids = websites.map(a => a.website_uuid);
- }
-
- return client
- .$transaction([
- client.pageview.deleteMany({
- where: { session: { website: { user_id } } },
- }),
- client.event_data.deleteMany({
- where: { event: { session: { website: { user_id } } } },
- }),
- client.event.deleteMany({
- where: { session: { website: { user_id } } },
- }),
- client.session.deleteMany({
- where: { website: { user_id } },
- }),
- client.website.deleteMany({
- where: { user_id },
- }),
- client.account.delete({
- where: {
- user_id,
- },
- }),
- ])
- .then(async res => {
- if (redis.client) {
- for (let i = 0; i < websiteUuids.length; i++) {
- await redis.client.set(`website:${websiteUuids[i]}`, DELETED);
- }
- }
-
- return res;
- });
-}
diff --git a/queries/admin/account/getAccount.js b/queries/admin/account/getAccount.js
deleted file mode 100644
index c414f56d..00000000
--- a/queries/admin/account/getAccount.js
+++ /dev/null
@@ -1,7 +0,0 @@
-import prisma from 'lib/prisma';
-
-export async function getAccount(where) {
- return prisma.client.account.findUnique({
- where,
- });
-}
diff --git a/queries/admin/account/getAccountById.js b/queries/admin/account/getAccountById.js
deleted file mode 100644
index 74c4a4a9..00000000
--- a/queries/admin/account/getAccountById.js
+++ /dev/null
@@ -1,9 +0,0 @@
-import prisma from 'lib/prisma';
-
-export async function getAccountById(user_id) {
- return prisma.client.account.findUnique({
- where: {
- user_id,
- },
- });
-}
diff --git a/queries/admin/account/getAccountByUsername.js b/queries/admin/account/getAccountByUsername.js
deleted file mode 100644
index ff64c8ce..00000000
--- a/queries/admin/account/getAccountByUsername.js
+++ /dev/null
@@ -1,9 +0,0 @@
-import prisma from 'lib/prisma';
-
-export async function getAccountByUsername(username) {
- return prisma.client.account.findUnique({
- where: {
- username,
- },
- });
-}
diff --git a/queries/admin/account/getAccounts.js b/queries/admin/account/getAccounts.js
deleted file mode 100644
index 154626d1..00000000
--- a/queries/admin/account/getAccounts.js
+++ /dev/null
@@ -1,19 +0,0 @@
-import prisma from 'lib/prisma';
-
-export async function getAccounts() {
- return prisma.client.account.findMany({
- orderBy: [
- { is_admin: 'desc' },
- {
- username: 'asc',
- },
- ],
- select: {
- user_id: true,
- username: true,
- is_admin: true,
- created_at: true,
- updated_at: true,
- },
- });
-}
diff --git a/queries/admin/account/updateAccount.js b/queries/admin/account/updateAccount.js
deleted file mode 100644
index 80509dec..00000000
--- a/queries/admin/account/updateAccount.js
+++ /dev/null
@@ -1,10 +0,0 @@
-import prisma from 'lib/prisma';
-
-export async function updateAccount(user_id, data) {
- return prisma.client.account.update({
- where: {
- user_id,
- },
- data,
- });
-}
diff --git a/queries/admin/team.ts b/queries/admin/team.ts
new file mode 100644
index 00000000..1bebcadb
--- /dev/null
+++ b/queries/admin/team.ts
@@ -0,0 +1,72 @@
+import { Prisma, Team } from '@prisma/client';
+import prisma from 'lib/prisma';
+import { uuid } from 'lib/crypto';
+import { ROLES } from 'lib/constants';
+import { Website } from 'lib/types';
+
+export async function getTeam(where: Prisma.TeamWhereInput): Promise {
+ return prisma.client.team.findFirst({
+ where,
+ });
+}
+
+export async function getTeams(where: Prisma.TeamWhereInput): Promise {
+ return prisma.client.team.findMany({
+ where,
+ });
+}
+
+export async function getTeamWebsites(teamId: string): Promise {
+ return prisma.client.website.findMany({
+ where: {
+ teamId,
+ },
+ orderBy: [
+ {
+ name: 'asc',
+ },
+ ],
+ });
+}
+
+export async function createTeam(data: Prisma.TeamCreateInput): Promise {
+ const { id, userId } = data;
+
+ return prisma.transaction([
+ prisma.client.team.create({
+ data,
+ }),
+ prisma.client.teamUser.create({
+ data: {
+ id: uuid(),
+ teamId: id,
+ userId,
+ role: ROLES.teamOwner,
+ },
+ }),
+ ]);
+}
+
+export async function updateTeam(
+ data: Prisma.TeamUpdateInput,
+ where: Prisma.TeamWhereUniqueInput,
+): Promise {
+ return prisma.client.team.update({
+ data: {
+ ...data,
+ updatedAt: new Date(),
+ },
+ where,
+ });
+}
+
+export async function deleteTeam(teamId: string): Promise {
+ return prisma.client.team.update({
+ data: {
+ deletedAt: new Date(),
+ },
+ where: {
+ id: teamId,
+ },
+ });
+}
diff --git a/queries/admin/teamUser.ts b/queries/admin/teamUser.ts
new file mode 100644
index 00000000..13090031
--- /dev/null
+++ b/queries/admin/teamUser.ts
@@ -0,0 +1,56 @@
+import { Prisma, TeamUser } from '@prisma/client';
+import { uuid } from 'lib/crypto';
+import prisma from 'lib/prisma';
+
+export async function getTeamUser(teamId: string, userId: string): Promise {
+ return prisma.client.teamUser.findFirst({
+ where: {
+ teamId,
+ userId,
+ },
+ });
+}
+
+export async function getTeamUsers(teamId: string): Promise {
+ return prisma.client.teamUser.findMany({
+ where: {
+ teamId,
+ },
+ });
+}
+
+export async function createTeamUser(
+ userId: string,
+ teamId: string,
+ role: string,
+): Promise {
+ return prisma.client.teamUser.create({
+ data: {
+ id: uuid(),
+ userId,
+ teamId,
+ role,
+ },
+ });
+}
+
+export async function updateTeamUser(
+ data: Prisma.TeamUserUpdateInput,
+ where: Prisma.TeamUserWhereUniqueInput,
+): Promise {
+ return prisma.client.teamUser.update({
+ data,
+ where,
+ });
+}
+
+export async function deleteTeamUser(teamUserId: string): Promise {
+ return prisma.client.teamUser.update({
+ data: {
+ deletedAt: new Date(),
+ },
+ where: {
+ id: teamUserId,
+ },
+ });
+}
diff --git a/queries/admin/user.ts b/queries/admin/user.ts
new file mode 100644
index 00000000..a1cfd901
--- /dev/null
+++ b/queries/admin/user.ts
@@ -0,0 +1,159 @@
+import { Prisma, Team } from '@prisma/client';
+import cache from 'lib/cache';
+import prisma from 'lib/prisma';
+import { Website } from 'lib/types';
+
+export interface User {
+ id: string;
+ username: string;
+ password?: string;
+ createdAt?: Date;
+}
+
+export async function getUser(
+ where: Prisma.UserWhereUniqueInput,
+ options: { includePassword?: boolean } = {},
+): Promise {
+ const { includePassword = false } = options;
+
+ return prisma.client.user.findUnique({
+ where,
+ select: {
+ id: true,
+ username: true,
+ password: includePassword,
+ role: true,
+ },
+ });
+}
+
+export async function getUsers(): Promise {
+ return prisma.client.user.findMany({
+ orderBy: [
+ {
+ username: 'asc',
+ },
+ ],
+ select: {
+ id: true,
+ username: true,
+ role: true,
+ createdAt: true,
+ },
+ });
+}
+
+export async function getUserTeams(userId: string): Promise {
+ return prisma.client.teamUser
+ .findMany({
+ where: {
+ userId,
+ },
+ include: {
+ team: true,
+ },
+ })
+ .then(data => {
+ return data.map(a => a.team);
+ });
+}
+
+export async function getUserWebsites(userId: string): Promise {
+ return prisma.client.website.findMany({
+ where: {
+ userId,
+ },
+ orderBy: [
+ {
+ name: 'asc',
+ },
+ ],
+ });
+}
+
+export async function createUser(data: {
+ id: string;
+ username: string;
+ password: string;
+ role: string;
+}): Promise<{
+ id: string;
+ username: string;
+ role: string;
+}> {
+ return prisma.client.user.create({
+ data,
+ select: {
+ id: true,
+ username: true,
+ role: true,
+ },
+ });
+}
+
+export async function updateUser(
+ data: Prisma.UserUpdateInput,
+ where: Prisma.UserWhereUniqueInput,
+): Promise {
+ return prisma.client.user.update({
+ where,
+ data,
+ select: {
+ id: true,
+ username: true,
+ role: true,
+ createdAt: true,
+ },
+ });
+}
+
+export async function deleteUser(
+ userId: string,
+): Promise<[Prisma.BatchPayload, Prisma.BatchPayload, Prisma.BatchPayload, User]> {
+ const { client } = prisma;
+
+ const websites = await client.website.findMany({
+ where: { userId },
+ });
+
+ let websiteIds = [];
+
+ if (websites.length > 0) {
+ websiteIds = websites.map(a => a.id);
+ }
+
+ return prisma
+ .transaction([
+ client.websiteEvent.deleteMany({
+ where: { websiteId: { in: websiteIds } },
+ }),
+ client.session.deleteMany({
+ where: { websiteId: { in: websiteIds } },
+ }),
+ client.website.updateMany({
+ data: {
+ deletedAt: new Date(),
+ },
+ where: { id: { in: websiteIds } },
+ }),
+ client.user.update({
+ data: {
+ deletedAt: new Date(),
+ },
+ where: {
+ id: userId,
+ },
+ }),
+ ])
+ .then(async data => {
+ if (cache.enabled) {
+ const ids = websites.map(a => a.id);
+
+ for (let i = 0; i < ids.length; i++) {
+ await cache.deleteWebsite(`website:${ids[i]}`);
+ }
+ }
+
+ return data;
+ });
+}
diff --git a/queries/admin/website.ts b/queries/admin/website.ts
new file mode 100644
index 00000000..cf2425a3
--- /dev/null
+++ b/queries/admin/website.ts
@@ -0,0 +1,110 @@
+import { Prisma, Website } from '@prisma/client';
+import cache from 'lib/cache';
+import prisma from 'lib/prisma';
+import { runQuery, CLICKHOUSE, PRISMA } from 'lib/db';
+
+export async function getWebsite(where: Prisma.WebsiteWhereUniqueInput): Promise {
+ return prisma.client.website.findUnique({
+ where,
+ });
+}
+
+export async function getWebsites(): Promise {
+ return prisma.client.website.findMany({
+ orderBy: {
+ name: 'asc',
+ },
+ });
+}
+
+export async function createWebsite(
+ data: Prisma.WebsiteCreateInput | Prisma.WebsiteUncheckedCreateInput,
+): Promise {
+ return prisma.client.website
+ .create({
+ data,
+ })
+ .then(async data => {
+ if (cache.enabled) {
+ await cache.storeWebsite(data);
+ }
+
+ return data;
+ });
+}
+
+export async function updateWebsite(
+ websiteId,
+ data: Prisma.WebsiteUpdateInput | Prisma.WebsiteUncheckedUpdateInput,
+): Promise {
+ return prisma.client.website.update({
+ where: {
+ id: websiteId,
+ },
+ data,
+ });
+}
+
+export async function resetWebsite(
+ websiteId,
+): Promise<[Prisma.BatchPayload, Prisma.BatchPayload, Website]> {
+ const { client, transaction } = prisma;
+
+ const { revId } = await getWebsite({ id: websiteId });
+
+ return transaction([
+ client.websiteEvent.deleteMany({
+ where: { websiteId },
+ }),
+ client.session.deleteMany({
+ where: { websiteId },
+ }),
+ client.website.update({ where: { id: websiteId }, data: { revId: revId + 1 } }),
+ ]).then(async data => {
+ if (cache.enabled) {
+ await cache.storeWebsite(data[2]);
+ }
+
+ return data;
+ });
+}
+
+export async function deleteWebsite(websiteId: string) {
+ return runQuery({
+ [PRISMA]: () => deleteWebsiteRelationalQuery(websiteId),
+ [CLICKHOUSE]: () => deleteWebsiteClickhouseQuery(websiteId),
+ });
+}
+
+async function deleteWebsiteRelationalQuery(
+ websiteId,
+): Promise<[Prisma.BatchPayload, Prisma.BatchPayload, Website]> {
+ const { client, transaction } = prisma;
+
+ return transaction([
+ client.websiteEvent.deleteMany({
+ where: { websiteId },
+ }),
+ client.session.deleteMany({
+ where: { websiteId },
+ }),
+ client.website.delete({
+ where: { id: websiteId },
+ }),
+ ]).then(async data => {
+ if (cache.enabled) {
+ await cache.deleteWebsite(websiteId);
+ }
+
+ return data;
+ });
+}
+
+async function deleteWebsiteClickhouseQuery(websiteId): Promise {
+ return prisma.client.website.update({
+ data: {
+ deletedAt: new Date(),
+ },
+ where: { id: websiteId },
+ });
+}
diff --git a/queries/admin/website/createWebsite.js b/queries/admin/website/createWebsite.js
deleted file mode 100644
index 679fdaa3..00000000
--- a/queries/admin/website/createWebsite.js
+++ /dev/null
@@ -1,23 +0,0 @@
-import prisma from 'lib/prisma';
-import redis from 'lib/redis';
-
-export async function createWebsite(user_id, data) {
- return prisma.client.website
- .create({
- data: {
- account: {
- connect: {
- user_id,
- },
- },
- ...data,
- },
- })
- .then(async res => {
- if (redis.client && res) {
- await redis.client.set(`website:${res.website_uuid}`, res.website_id);
- }
-
- return res;
- });
-}
diff --git a/queries/admin/website/deleteWebsite.js b/queries/admin/website/deleteWebsite.js
deleted file mode 100644
index 4c8518dc..00000000
--- a/queries/admin/website/deleteWebsite.js
+++ /dev/null
@@ -1,33 +0,0 @@
-import prisma from 'lib/prisma';
-import redis, { DELETED } from 'lib/redis';
-import { getWebsiteById } from 'queries';
-
-export async function deleteWebsite(website_id) {
- const { client, transaction } = prisma;
-
- const { website_uuid } = await getWebsiteById(website_id);
-
- return transaction([
- client.pageview.deleteMany({
- where: { session: { website: { website_id } } },
- }),
- client.event_data.deleteMany({
- where: { event: { session: { website: { website_id } } } },
- }),
- client.event.deleteMany({
- where: { session: { website: { website_id } } },
- }),
- client.session.deleteMany({
- where: { website: { website_id } },
- }),
- client.website.delete({
- where: { website_id },
- }),
- ]).then(async res => {
- if (redis.client) {
- await redis.client.set(`website:${website_uuid}`, DELETED);
- }
-
- return res;
- });
-}
diff --git a/queries/admin/website/getAllWebsites.js b/queries/admin/website/getAllWebsites.js
deleted file mode 100644
index 23afd813..00000000
--- a/queries/admin/website/getAllWebsites.js
+++ /dev/null
@@ -1,23 +0,0 @@
-import prisma from 'lib/prisma';
-
-export async function getAllWebsites() {
- let data = await prisma.client.website.findMany({
- orderBy: [
- {
- user_id: 'asc',
- },
- {
- name: 'asc',
- },
- ],
- include: {
- account: {
- select: {
- username: true,
- },
- },
- },
- });
-
- return data.map(i => ({ ...i, account: i.account.username }));
-}
diff --git a/queries/admin/website/getUserWebsites.js b/queries/admin/website/getUserWebsites.js
deleted file mode 100644
index 5a9662c0..00000000
--- a/queries/admin/website/getUserWebsites.js
+++ /dev/null
@@ -1,12 +0,0 @@
-import prisma from 'lib/prisma';
-
-export async function getUserWebsites(user_id) {
- return prisma.client.website.findMany({
- where: {
- user_id,
- },
- orderBy: {
- name: 'asc',
- },
- });
-}
diff --git a/queries/admin/website/getWebsiteById.js b/queries/admin/website/getWebsiteById.js
deleted file mode 100644
index 9b8cfe93..00000000
--- a/queries/admin/website/getWebsiteById.js
+++ /dev/null
@@ -1,9 +0,0 @@
-import prisma from 'lib/prisma';
-
-export async function getWebsiteById(website_id) {
- return prisma.client.website.findUnique({
- where: {
- website_id,
- },
- });
-}
diff --git a/queries/admin/website/getWebsiteByShareId.js b/queries/admin/website/getWebsiteByShareId.js
deleted file mode 100644
index fbdeebc9..00000000
--- a/queries/admin/website/getWebsiteByShareId.js
+++ /dev/null
@@ -1,9 +0,0 @@
-import prisma from 'lib/prisma';
-
-export async function getWebsiteByShareId(share_id) {
- return prisma.client.website.findUnique({
- where: {
- share_id,
- },
- });
-}
diff --git a/queries/admin/website/getWebsiteByUuid.js b/queries/admin/website/getWebsiteByUuid.js
deleted file mode 100644
index 900e4539..00000000
--- a/queries/admin/website/getWebsiteByUuid.js
+++ /dev/null
@@ -1,18 +0,0 @@
-import prisma from 'lib/prisma';
-import redis from 'lib/redis';
-
-export async function getWebsiteByUuid(website_uuid) {
- return prisma.client.website
- .findUnique({
- where: {
- website_uuid,
- },
- })
- .then(async res => {
- if (redis.client && res) {
- await redis.client.set(`website:${res.website_uuid}`, 1);
- }
-
- return res;
- });
-}
diff --git a/queries/admin/website/resetWebsite.js b/queries/admin/website/resetWebsite.js
deleted file mode 100644
index 6941c2af..00000000
--- a/queries/admin/website/resetWebsite.js
+++ /dev/null
@@ -1,20 +0,0 @@
-import prisma from 'lib/prisma';
-
-export async function resetWebsite(website_id) {
- const { client, transaction } = prisma;
-
- return transaction([
- client.pageview.deleteMany({
- where: { session: { website: { website_id } } },
- }),
- client.event_data.deleteMany({
- where: { event: { session: { website: { website_id } } } },
- }),
- client.event.deleteMany({
- where: { session: { website: { website_id } } },
- }),
- client.session.deleteMany({
- where: { website: { website_id } },
- }),
- ]);
-}
diff --git a/queries/admin/website/updateWebsite.js b/queries/admin/website/updateWebsite.js
deleted file mode 100644
index 54f01f66..00000000
--- a/queries/admin/website/updateWebsite.js
+++ /dev/null
@@ -1,10 +0,0 @@
-import prisma from 'lib/prisma';
-
-export async function updateWebsite(website_id, data) {
- return prisma.client.website.update({
- where: {
- website_id,
- },
- data,
- });
-}
diff --git a/queries/analytics/event/getEventData.ts b/queries/analytics/event/getEventData.ts
new file mode 100644
index 00000000..103c3184
--- /dev/null
+++ b/queries/analytics/event/getEventData.ts
@@ -0,0 +1,93 @@
+import clickhouse from 'lib/clickhouse';
+import { CLICKHOUSE, PRISMA, runQuery } from 'lib/db';
+import prisma from 'lib/prisma';
+import cache from 'lib/cache';
+import { WebsiteMetric } from 'lib/types';
+import { EVENT_TYPE } from 'lib/constants';
+
+export async function getEventData(
+ ...args: [
+ websiteId: string,
+ data: {
+ startDate: Date;
+ endDate: Date;
+ eventName: string;
+ columns: any;
+ filters: object;
+ },
+ ]
+): Promise {
+ return runQuery({
+ [PRISMA]: () => relationalQuery(...args),
+ [CLICKHOUSE]: () => clickhouseQuery(...args),
+ }).then(results => {
+ return Object.keys(results[0]).map(a => {
+ return { x: a, y: results[0][`${a}`] };
+ });
+ });
+}
+
+async function relationalQuery(
+ websiteId: string,
+ data: {
+ startDate: Date;
+ endDate: Date;
+ eventName: string;
+ columns: any;
+ filters: object;
+ },
+) {
+ const { startDate, endDate, eventName, columns, filters } = data;
+ const { toUuid, rawQuery, getEventDataColumnsQuery, getEventDataFilterQuery } = prisma;
+ const params: any = [websiteId, startDate, endDate, eventName];
+
+ return rawQuery(
+ `select
+ ${getEventDataColumnsQuery('event_data', columns)}
+ from website_event
+ where website_id = $1${toUuid()}
+ and created_at between $2 and $3
+ and event_type = ${EVENT_TYPE.customEvent}
+ ${eventName ? `and eventName = $4` : ''}
+ ${
+ Object.keys(filters).length > 0
+ ? `and ${getEventDataFilterQuery('event_data', filters)}`
+ : ''
+ }`,
+ params,
+ );
+}
+
+async function clickhouseQuery(
+ websiteId: string,
+ data: {
+ startDate: Date;
+ endDate: Date;
+ eventName: string;
+ columns: any;
+ filters: object;
+ },
+) {
+ const { startDate, endDate, eventName, columns, filters } = data;
+ const { rawQuery, getBetweenDates, getEventDataColumnsQuery, getEventDataFilterQuery } =
+ clickhouse;
+ const website = await cache.fetchWebsite(websiteId);
+ const params = { websiteId, revId: website?.revId || 0 };
+
+ return rawQuery(
+ `select
+ ${getEventDataColumnsQuery('event_data', columns)}
+ from event
+ where website_id = {websiteId:UUID}
+ and rev_id = {revId:UInt32}
+ and event_type = ${EVENT_TYPE.customEvent}
+ ${eventName ? `and eventName = ${eventName}` : ''}
+ and ${getBetweenDates('created_at', startDate, endDate)}
+ ${
+ Object.keys(filters).length > 0
+ ? `and ${getEventDataFilterQuery('event_data', filters)}`
+ : ''
+ }`,
+ params,
+ );
+}
diff --git a/queries/analytics/event/getEventMetrics.js b/queries/analytics/event/getEventMetrics.js
deleted file mode 100644
index c37f1b39..00000000
--- a/queries/analytics/event/getEventMetrics.js
+++ /dev/null
@@ -1,63 +0,0 @@
-import prisma from 'lib/prisma';
-import clickhouse from 'lib/clickhouse';
-import { runQuery, CLICKHOUSE, PRISMA } from 'lib/db';
-
-export async function getEventMetrics(...args) {
- return runQuery({
- [PRISMA]: () => relationalQuery(...args),
- [CLICKHOUSE]: () => clickhouseQuery(...args),
- });
-}
-
-async function relationalQuery(
- website_id,
- start_at,
- end_at,
- timezone = 'utc',
- unit = 'day',
- filters = {},
-) {
- const { rawQuery, getDateQuery, getFilterQuery } = prisma;
- const params = [website_id, start_at, end_at];
-
- return rawQuery(
- `select
- event_name x,
- ${getDateQuery('created_at', unit, timezone)} t,
- count(*) y
- from event
- where website_id=$1
- and created_at between $2 and $3
- ${getFilterQuery('event', filters, params)}
- group by 1, 2
- order by 2`,
- params,
- );
-}
-
-async function clickhouseQuery(
- website_id,
- start_at,
- end_at,
- timezone = 'UTC',
- unit = 'day',
- filters = {},
-) {
- const { rawQuery, getDateQuery, getBetweenDates, getFilterQuery } = clickhouse;
- const params = [website_id];
-
- return rawQuery(
- `select
- event_name x,
- ${getDateQuery('created_at', unit, timezone)} t,
- count(*) y
- from event
- where event_name != ''
- and website_id= $1
- and ${getBetweenDates('created_at', start_at, end_at)}
- ${getFilterQuery('event', filters, params)}
- group by x, t
- order by t`,
- params,
- );
-}
diff --git a/queries/analytics/event/getEventMetrics.ts b/queries/analytics/event/getEventMetrics.ts
new file mode 100644
index 00000000..31cfe327
--- /dev/null
+++ b/queries/analytics/event/getEventMetrics.ts
@@ -0,0 +1,105 @@
+import prisma from 'lib/prisma';
+import clickhouse from 'lib/clickhouse';
+import { runQuery, CLICKHOUSE, PRISMA } from 'lib/db';
+import cache from 'lib/cache';
+import { WebsiteEventMetric } from 'lib/types';
+import { EVENT_TYPE } from 'lib/constants';
+
+export async function getEventMetrics(
+ ...args: [
+ websiteId: string,
+ data: {
+ startDate: Date;
+ endDate: Date;
+ timezone: string;
+ unit: string;
+ filters: {
+ url: string;
+ eventName: string;
+ };
+ },
+ ]
+): Promise {
+ return runQuery({
+ [PRISMA]: () => relationalQuery(...args),
+ [CLICKHOUSE]: () => clickhouseQuery(...args),
+ });
+}
+
+async function relationalQuery(
+ websiteId: string,
+ {
+ startDate,
+ endDate,
+ timezone = 'utc',
+ unit = 'day',
+ filters,
+ }: {
+ startDate: Date;
+ endDate: Date;
+ timezone: string;
+ unit: string;
+ filters: {
+ url: string;
+ eventName: string;
+ };
+ },
+) {
+ const { toUuid, rawQuery, getDateQuery, getFilterQuery } = prisma;
+ const params: any = [websiteId, startDate, endDate];
+
+ return rawQuery(
+ `select
+ event_name x,
+ ${getDateQuery('created_at', unit, timezone)} t,
+ count(*) y
+ from website_event
+ where website_id = $1${toUuid()}
+ and created_at between $2 and $3
+ and event_type = ${EVENT_TYPE.customEvent}
+ ${getFilterQuery(filters, params)}
+ group by 1, 2
+ order by 2`,
+ params,
+ );
+}
+
+async function clickhouseQuery(
+ websiteId: string,
+ {
+ startDate,
+ endDate,
+ timezone = 'utc',
+ unit = 'day',
+ filters,
+ }: {
+ startDate: Date;
+ endDate: Date;
+ timezone: string;
+ unit: string;
+ filters: {
+ url: string;
+ eventName: string;
+ };
+ },
+) {
+ const { rawQuery, getDateQuery, getBetweenDates, getFilterQuery } = clickhouse;
+ const website = await cache.fetchWebsite(websiteId);
+ const params = { websiteId, revId: website?.revId || 0 };
+
+ return rawQuery(
+ `select
+ event_name x,
+ ${getDateQuery('created_at', unit, timezone)} t,
+ count(*) y
+ from event
+ where website_id = {websiteId:UUID}
+ and rev_id = {revId:UInt32}
+ and event_type = ${EVENT_TYPE.customEvent}
+ and ${getBetweenDates('created_at', startDate, endDate)}
+ ${getFilterQuery(filters, params)}
+ group by x, t
+ order by t`,
+ params,
+ );
+}
diff --git a/queries/analytics/event/getEvents.js b/queries/analytics/event/getEvents.js
deleted file mode 100644
index 441eed64..00000000
--- a/queries/analytics/event/getEvents.js
+++ /dev/null
@@ -1,43 +0,0 @@
-import prisma from 'lib/prisma';
-import clickhouse from 'lib/clickhouse';
-import { runQuery, CLICKHOUSE, PRISMA } from 'lib/db';
-
-export function getEvents(...args) {
- return runQuery({
- [PRISMA]: () => relationalQuery(...args),
- [CLICKHOUSE]: () => clickhouseQuery(...args),
- });
-}
-
-function relationalQuery(websites, start_at) {
- return prisma.client.event.findMany({
- where: {
- website: {
- website_id: {
- in: websites,
- },
- },
- created_at: {
- gte: start_at,
- },
- },
- });
-}
-
-function clickhouseQuery(websites, start_at) {
- const { rawQuery, getDateFormat } = clickhouse;
-
- return rawQuery(
- `select
- event_uuid,
- website_id,
- session_uuid,
- created_at,
- url,
- event_name
- from event
- where event_name != ''
- and ${websites && websites.length > 0 ? `website_id in (${websites.join(',')})` : '0 = 0'}
- and created_at >= ${getDateFormat(start_at)}`,
- );
-}
diff --git a/queries/analytics/event/getEvents.ts b/queries/analytics/event/getEvents.ts
new file mode 100644
index 00000000..5d01824c
--- /dev/null
+++ b/queries/analytics/event/getEvents.ts
@@ -0,0 +1,46 @@
+import prisma from 'lib/prisma';
+import clickhouse from 'lib/clickhouse';
+import { runQuery, CLICKHOUSE, PRISMA } from 'lib/db';
+import { EVENT_TYPE } from 'lib/constants';
+
+export function getEvents(...args: [websites: string[], startAt: Date]) {
+ return runQuery({
+ [PRISMA]: () => relationalQuery(...args),
+ [CLICKHOUSE]: () => clickhouseQuery(...args),
+ });
+}
+
+function relationalQuery(websites: string[], startAt: Date) {
+ return prisma.client.event.findMany({
+ where: {
+ websiteId: {
+ in: websites,
+ },
+ createdAt: {
+ gte: startAt,
+ },
+ },
+ });
+}
+
+function clickhouseQuery(websites: string[], startAt: Date) {
+ const { rawQuery } = clickhouse;
+
+ return rawQuery(
+ `select
+ event_id,
+ website_id,
+ session_id,
+ created_at,
+ url,
+ event_name
+ from event
+ where event_type = ${EVENT_TYPE.customEvent}
+ and ${websites && websites.length > 0 ? `website_id in {websites:Array(UUID)}` : '0 = 0'}
+ and created_at >= {startAt:DateTime('UTC')}`,
+ {
+ websites,
+ startAt,
+ },
+ );
+}
diff --git a/queries/analytics/event/saveEvent.js b/queries/analytics/event/saveEvent.js
deleted file mode 100644
index 3b10f4cb..00000000
--- a/queries/analytics/event/saveEvent.js
+++ /dev/null
@@ -1,52 +0,0 @@
-import { EVENT_NAME_LENGTH, URL_LENGTH } from 'lib/constants';
-import { CLICKHOUSE, PRISMA, runQuery } from 'lib/db';
-import kafka from 'lib/kafka';
-import prisma from 'lib/prisma';
-
-export async function saveEvent(...args) {
- return runQuery({
- [PRISMA]: () => relationalQuery(...args),
- [CLICKHOUSE]: () => clickhouseQuery(...args),
- });
-}
-
-async function relationalQuery(website_id, { session_id, url, event_name, event_data }) {
- const data = {
- website_id,
- session_id,
- url: url?.substring(0, URL_LENGTH),
- event_name: event_name?.substring(0, EVENT_NAME_LENGTH),
- };
-
- if (event_data) {
- data.event_data = {
- create: {
- event_data: event_data,
- },
- };
- }
-
- return prisma.client.event.create({
- data,
- });
-}
-
-async function clickhouseQuery(
- website_id,
- { session: { country, ...sessionArgs }, event_uuid, url, event_name, event_data },
-) {
- const { getDateFormat, sendMessage } = kafka;
-
- const params = {
- event_uuid,
- website_id,
- created_at: getDateFormat(new Date()),
- url: url?.substring(0, URL_LENGTH),
- event_name: event_name?.substring(0, EVENT_NAME_LENGTH),
- event_data: JSON.stringify(event_data),
- ...sessionArgs,
- country: country ? country : null,
- };
-
- await sendMessage(params, 'event');
-}
diff --git a/queries/analytics/event/saveEvent.ts b/queries/analytics/event/saveEvent.ts
new file mode 100644
index 00000000..430ffd63
--- /dev/null
+++ b/queries/analytics/event/saveEvent.ts
@@ -0,0 +1,91 @@
+import { EVENT_NAME_LENGTH, URL_LENGTH, EVENT_TYPE } from 'lib/constants';
+import { CLICKHOUSE, PRISMA, runQuery } from 'lib/db';
+import kafka from 'lib/kafka';
+import prisma from 'lib/prisma';
+import { uuid } from 'lib/crypto';
+import cache from 'lib/cache';
+
+export async function saveEvent(args: {
+ id: string;
+ websiteId: string;
+ url: string;
+ referrer?: string;
+ eventName?: string;
+ eventData?: any;
+ hostname?: string;
+ browser?: string;
+ os?: string;
+ device?: string;
+ screen?: string;
+ language?: string;
+ country?: string;
+}) {
+ return runQuery({
+ [PRISMA]: () => relationalQuery(args),
+ [CLICKHOUSE]: () => clickhouseQuery(args),
+ });
+}
+
+async function relationalQuery(data: {
+ id: string;
+ websiteId: string;
+ url: string;
+ referrer?: string;
+ eventName?: string;
+ eventData?: any;
+}) {
+ const { websiteId, id: sessionId, url, eventName, eventData, referrer } = data;
+
+ const params = {
+ id: uuid(),
+ websiteId,
+ sessionId,
+ url: url?.substring(0, URL_LENGTH),
+ referrer: referrer?.substring(0, URL_LENGTH),
+ eventType: EVENT_TYPE.customEvent,
+ eventName: eventName?.substring(0, EVENT_NAME_LENGTH),
+ eventData,
+ };
+
+ return prisma.client.websiteEvent.create({
+ data: params,
+ });
+}
+
+async function clickhouseQuery(data: {
+ id: string;
+ websiteId: string;
+ url: string;
+ referrer?: string;
+ eventName?: string;
+ eventData?: any;
+ hostname?: string;
+ browser?: string;
+ os?: string;
+ device?: string;
+ screen?: string;
+ language?: string;
+ country?: string;
+}) {
+ const { websiteId, id: sessionId, url, eventName, eventData, country, ...args } = data;
+ const { getDateFormat, sendMessage } = kafka;
+ const website = await cache.fetchWebsite(websiteId);
+
+ const message = {
+ website_id: websiteId,
+ session_id: sessionId,
+ event_id: uuid(),
+ url: url?.substring(0, URL_LENGTH),
+ event_type: EVENT_TYPE.customEvent,
+ event_name: eventName?.substring(0, EVENT_NAME_LENGTH),
+ event_data: eventData ? JSON.stringify(eventData) : null,
+ rev_id: website?.revId || 0,
+ created_at: getDateFormat(new Date()),
+ country: country ? country : null,
+ ...args,
+ };
+
+ await sendMessage(message, 'event');
+
+ return data;
+}
diff --git a/queries/analytics/pageview/getPageviewMetrics.js b/queries/analytics/pageview/getPageviewMetrics.js
deleted file mode 100644
index bea3502c..00000000
--- a/queries/analytics/pageview/getPageviewMetrics.js
+++ /dev/null
@@ -1,55 +0,0 @@
-import prisma from 'lib/prisma';
-import clickhouse from 'lib/clickhouse';
-import { runQuery, CLICKHOUSE, PRISMA } from 'lib/db';
-
-export async function getPageviewMetrics(...args) {
- return runQuery({
- [PRISMA]: () => relationalQuery(...args),
- [CLICKHOUSE]: () => clickhouseQuery(...args),
- });
-}
-
-async function relationalQuery(website_id, { startDate, endDate, column, table, filters = {} }) {
- const { rawQuery, parseFilters } = prisma;
- const params = [website_id, startDate, endDate];
- const { pageviewQuery, sessionQuery, eventQuery, joinSession } = parseFilters(
- table,
- column,
- filters,
- params,
- );
-
- return rawQuery(
- `select ${column} x, count(*) y
- from ${table}
- ${joinSession}
- where ${table}.website_id=$1
- and ${table}.created_at between $2 and $3
- ${pageviewQuery}
- ${joinSession && sessionQuery}
- ${eventQuery}
- group by 1
- order by 2 desc`,
- params,
- );
-}
-
-async function clickhouseQuery(website_id, { startDate, endDate, column, filters = {} }) {
- const { rawQuery, parseFilters, getBetweenDates } = clickhouse;
- const params = [website_id];
- const { pageviewQuery, sessionQuery, eventQuery } = parseFilters(column, filters, params);
-
- return rawQuery(
- `select ${column} x, count(*) y
- from event
- where website_id= $1
- ${column !== 'event_name' ? `and event_name = ''` : `and event_name != ''`}
- and ${getBetweenDates('created_at', startDate, endDate)}
- ${pageviewQuery}
- ${sessionQuery}
- ${eventQuery}
- group by x
- order by y desc`,
- params,
- );
-}
diff --git a/queries/analytics/pageview/getPageviewMetrics.ts b/queries/analytics/pageview/getPageviewMetrics.ts
new file mode 100644
index 00000000..582eb006
--- /dev/null
+++ b/queries/analytics/pageview/getPageviewMetrics.ts
@@ -0,0 +1,90 @@
+import prisma from 'lib/prisma';
+import clickhouse from 'lib/clickhouse';
+import { runQuery, CLICKHOUSE, PRISMA } from 'lib/db';
+import cache from 'lib/cache';
+import { Prisma } from '@prisma/client';
+import { EVENT_TYPE } from 'lib/constants';
+
+export async function getPageviewMetrics(
+ ...args: [
+ websiteId: string,
+ data: {
+ startDate: Date;
+ endDate: Date;
+ column: Prisma.WebsiteEventScalarFieldEnum | Prisma.SessionScalarFieldEnum;
+ table: string;
+ filters: object;
+ },
+ ]
+) {
+ return runQuery({
+ [PRISMA]: () => relationalQuery(...args),
+ [CLICKHOUSE]: () => clickhouseQuery(...args),
+ });
+}
+
+async function relationalQuery(
+ websiteId: string,
+ data: {
+ startDate: Date;
+ endDate: Date;
+ column: Prisma.WebsiteEventScalarFieldEnum | Prisma.SessionScalarFieldEnum;
+ filters: object;
+ },
+) {
+ const { startDate, endDate, column, filters = {} } = data;
+ const { rawQuery, parseFilters, toUuid } = prisma;
+ const params: any = {
+ websiteId,
+ startDate,
+ endDate,
+ type: EVENT_TYPE.pageView,
+ };
+ const { filterQuery, joinSession } = parseFilters(filters, params);
+
+ return rawQuery(
+ `select ${column} x, count(*) y
+ from website_event
+ ${joinSession}
+ where website_event.website_id = $1${toUuid()}
+ and website_event.created_at between $2 and $3
+ and event_type = $4
+ ${filterQuery}
+ group by 1
+ order by 2 desc`,
+ params,
+ );
+}
+
+async function clickhouseQuery(
+ websiteId: string,
+ data: {
+ startDate: Date;
+ endDate: Date;
+ column: Prisma.WebsiteEventScalarFieldEnum | Prisma.SessionScalarFieldEnum;
+ filters: object;
+ },
+) {
+ const { startDate, endDate, column, filters = {} } = data;
+ const { rawQuery, parseFilters, getBetweenDates } = clickhouse;
+ const website = await cache.fetchWebsite(websiteId);
+ const params = {
+ websiteId,
+ revId: website?.revId || 0,
+ eventType: EVENT_TYPE.pageView,
+ };
+ const { filterQuery } = parseFilters(filters, params);
+
+ return rawQuery(
+ `select ${column} x, count(*) y
+ from event
+ where website_id = {websiteId:UUID}
+ and rev_id = {revId:UInt32}
+ and event_type = {eventType:UInt32}
+ and ${getBetweenDates('created_at', startDate, endDate)}
+ ${filterQuery}
+ group by x
+ order by y desc`,
+ params,
+ );
+}
diff --git a/queries/analytics/pageview/getPageviewParams.js b/queries/analytics/pageview/getPageviewParams.js
deleted file mode 100644
index fa445da5..00000000
--- a/queries/analytics/pageview/getPageviewParams.js
+++ /dev/null
@@ -1,40 +0,0 @@
-import prisma from 'lib/prisma';
-import { runQuery, CLICKHOUSE, PRISMA } from 'lib/db';
-
-export async function getPageviewParams(...args) {
- return runQuery({
- [PRISMA]: () => relationalQuery(...args),
- [CLICKHOUSE]: () => clickhouseQuery(...args),
- });
-}
-
-async function relationalQuery(website_id, start_at, end_at, column, table, filters = {}) {
- const { parseFilters, rawQuery } = prisma;
- const params = [website_id, start_at, end_at];
- const { pageviewQuery, sessionQuery, eventQuery, joinSession } = parseFilters(
- table,
- column,
- filters,
- params,
- );
-
- return rawQuery(
- `select url x,
- count(*) y
- from ${table}
- ${joinSession}
- where ${table}.website_id=$1
- and ${table}.created_at between $2 and $3
- and ${table}.url like '%?%'
- ${pageviewQuery}
- ${joinSession && sessionQuery}
- ${eventQuery}
- group by 1
- order by 2 desc`,
- params,
- );
-}
-
-function clickhouseQuery() {
- return Promise.reject(new Error('Not implemented.'));
-}
diff --git a/queries/analytics/pageview/getPageviewStats.js b/queries/analytics/pageview/getPageviewStats.js
deleted file mode 100644
index 4f74cf98..00000000
--- a/queries/analytics/pageview/getPageviewStats.js
+++ /dev/null
@@ -1,73 +0,0 @@
-import prisma from 'lib/prisma';
-import clickhouse from 'lib/clickhouse';
-import { runQuery, CLICKHOUSE, PRISMA } from 'lib/db';
-
-export async function getPageviewStats(...args) {
- return runQuery({
- [PRISMA]: () => relationalQuery(...args),
- [CLICKHOUSE]: () => clickhouseQuery(...args),
- });
-}
-
-async function relationalQuery(
- website_id,
- {
- start_at,
- end_at,
- timezone = 'utc',
- unit = 'day',
- count = '*',
- filters = {},
- sessionKey = 'session_id',
- },
-) {
- const { getDateQuery, parseFilters, rawQuery } = prisma;
- const params = [website_id, start_at, end_at];
- const { pageviewQuery, sessionQuery, joinSession } = parseFilters(
- 'pageview',
- null,
- filters,
- params,
- );
-
- return rawQuery(
- `select ${getDateQuery('pageview.created_at', unit, timezone)} t,
- count(${count !== '*' ? `${count}${sessionKey}` : count}) y
- from pageview
- ${joinSession}
- where pageview.website_id=$1
- and pageview.created_at between $2 and $3
- ${pageviewQuery}
- ${sessionQuery}
- group by 1`,
- params,
- );
-}
-
-async function clickhouseQuery(
- website_id,
- { start_at, end_at, timezone = 'UTC', unit = 'day', count = '*', filters = {} },
-) {
- const { parseFilters, rawQuery, getDateStringQuery, getDateQuery, getBetweenDates } = clickhouse;
- const params = [website_id];
- const { pageviewQuery, sessionQuery } = parseFilters(null, filters, params);
-
- return rawQuery(
- `select
- ${getDateStringQuery('g.t', unit)} as t,
- g.y as y
- from
- (select
- ${getDateQuery('created_at', unit, timezone)} t,
- count(${count !== '*' ? 'distinct session_uuid' : count}) y
- from event
- where event_name = ''
- and website_id= $1
- and ${getBetweenDates('created_at', start_at, end_at)}
- ${pageviewQuery}
- ${sessionQuery}
- group by t) g
- order by t`,
- params,
- );
-}
diff --git a/queries/analytics/pageview/getPageviewStats.ts b/queries/analytics/pageview/getPageviewStats.ts
new file mode 100644
index 00000000..b2d86b33
--- /dev/null
+++ b/queries/analytics/pageview/getPageviewStats.ts
@@ -0,0 +1,102 @@
+import cache from 'lib/cache';
+import clickhouse from 'lib/clickhouse';
+import { CLICKHOUSE, PRISMA, runQuery } from 'lib/db';
+import prisma from 'lib/prisma';
+import { EVENT_TYPE } from 'lib/constants';
+
+export async function getPageviewStats(
+ ...args: [
+ websiteId: string,
+ data: {
+ startDate: Date;
+ endDate: Date;
+ timezone?: string;
+ unit?: string;
+ count?: string;
+ filters: object;
+ sessionKey?: string;
+ },
+ ]
+) {
+ return runQuery({
+ [PRISMA]: () => relationalQuery(...args),
+ [CLICKHOUSE]: () => clickhouseQuery(...args),
+ });
+}
+
+async function relationalQuery(
+ websiteId: string,
+ data: {
+ startDate: Date;
+ endDate: Date;
+ timezone?: string;
+ unit?: string;
+ count?: string;
+ filters: object;
+ sessionKey?: string;
+ },
+) {
+ const {
+ startDate,
+ endDate,
+ timezone = 'utc',
+ unit = 'day',
+ count = '*',
+ filters = {},
+ sessionKey = 'session_id',
+ } = data;
+ const { toUuid, getDateQuery, parseFilters, rawQuery } = prisma;
+ const params: any = [websiteId, startDate, endDate];
+ const { filterQuery, joinSession } = parseFilters(filters, params);
+
+ return rawQuery(
+ `select ${getDateQuery('website_event.created_at', unit, timezone)} t,
+ count(${count !== '*' ? `${count}${sessionKey}` : count}) y
+ from website_event
+ ${joinSession}
+ where website_event.website_id = $1${toUuid()}
+ and website_event.created_at between $2 and $3
+ and event_type = ${EVENT_TYPE.pageView}
+ ${filterQuery}
+ group by 1`,
+ params,
+ );
+}
+
+async function clickhouseQuery(
+ websiteId: string,
+ data: {
+ startDate: Date;
+ endDate: Date;
+ timezone?: string;
+ unit?: string;
+ count?: string;
+ filters: object;
+ sessionKey?: string;
+ },
+) {
+ const { startDate, endDate, timezone = 'UTC', unit = 'day', count = '*', filters = {} } = data;
+ const { parseFilters, rawQuery, getDateStringQuery, getDateQuery, getBetweenDates } = clickhouse;
+ const website = await cache.fetchWebsite(websiteId);
+ const params = { websiteId, revId: website?.revId || 0 };
+ const { filterQuery } = parseFilters(filters, params);
+
+ return rawQuery(
+ `select
+ ${getDateStringQuery('g.t', unit)} as t,
+ g.y as y
+ from
+ (select
+ ${getDateQuery('created_at', unit, timezone)} t,
+ count(${count !== '*' ? 'distinct session_id' : count}) y
+ from event
+ where website_id = {websiteId:UUID}
+ and rev_id = {revId:UInt32}
+ and event_type = ${EVENT_TYPE.pageView}
+ and ${getBetweenDates('created_at', startDate, endDate)}
+ ${filterQuery}
+ group by t) g
+ order by t`,
+ params,
+ );
+}
diff --git a/queries/analytics/pageview/getPageviews.js b/queries/analytics/pageview/getPageviews.js
deleted file mode 100644
index bc909b72..00000000
--- a/queries/analytics/pageview/getPageviews.js
+++ /dev/null
@@ -1,39 +0,0 @@
-import prisma from 'lib/prisma';
-import clickhouse from 'lib/clickhouse';
-import { runQuery, CLICKHOUSE, PRISMA } from 'lib/db';
-
-export async function getPageviews(...args) {
- return runQuery({
- [PRISMA]: () => relationalQuery(...args),
- [CLICKHOUSE]: () => clickhouseQuery(...args),
- });
-}
-
-async function relationalQuery(websites, start_at) {
- return prisma.client.pageview.findMany({
- where: {
- website: {
- website_id: {
- in: websites,
- },
- },
- created_at: {
- gte: start_at,
- },
- },
- });
-}
-
-async function clickhouseQuery(websites, start_at) {
- return clickhouse.rawQuery(
- `select
- website_id,
- session_uuid,
- created_at,
- url
- from event
- where event_name = ''
- and ${websites && websites.length > 0 ? `website_id in (${websites.join(',')})` : '0 = 0'}
- and created_at >= ${clickhouse.getDateFormat(start_at)}`,
- );
-}
diff --git a/queries/analytics/pageview/getPageviews.ts b/queries/analytics/pageview/getPageviews.ts
new file mode 100644
index 00000000..eb60a1f5
--- /dev/null
+++ b/queries/analytics/pageview/getPageviews.ts
@@ -0,0 +1,44 @@
+import prisma from 'lib/prisma';
+import clickhouse from 'lib/clickhouse';
+import { runQuery, CLICKHOUSE, PRISMA } from 'lib/db';
+import { EVENT_TYPE } from 'lib/constants';
+
+export async function getPageviews(...args: [websites: string[], startAt: Date]) {
+ return runQuery({
+ [PRISMA]: () => relationalQuery(...args),
+ [CLICKHOUSE]: () => clickhouseQuery(...args),
+ });
+}
+
+async function relationalQuery(websites: string[], startAt: Date) {
+ return prisma.client.pageview.findMany({
+ where: {
+ websiteId: {
+ in: websites,
+ },
+ createdAt: {
+ gte: startAt,
+ },
+ },
+ });
+}
+
+async function clickhouseQuery(websites: string[], startAt: Date) {
+ const { rawQuery } = clickhouse;
+
+ return rawQuery(
+ `select
+ website_id,
+ session_id,
+ created_at,
+ url
+ from event
+ where event_type = ${EVENT_TYPE.pageView}
+ and ${websites && websites.length > 0 ? `website_id in {websites:Array(UUID)}` : '0 = 0'}
+ and created_at >= {startAt:DateTime('UTC')}`,
+ {
+ websites,
+ startAt,
+ },
+ );
+}
diff --git a/queries/analytics/pageview/savePageView.js b/queries/analytics/pageview/savePageView.js
deleted file mode 100644
index 826d9275..00000000
--- a/queries/analytics/pageview/savePageView.js
+++ /dev/null
@@ -1,39 +0,0 @@
-import { URL_LENGTH } from 'lib/constants';
-import { CLICKHOUSE, PRISMA, runQuery } from 'lib/db';
-import kafka from 'lib/kafka';
-import prisma from 'lib/prisma';
-
-export async function savePageView(...args) {
- return runQuery({
- [PRISMA]: () => relationalQuery(...args),
- [CLICKHOUSE]: () => clickhouseQuery(...args),
- });
-}
-
-async function relationalQuery(website_id, { session: { session_id }, url, referrer }) {
- return prisma.client.pageview.create({
- data: {
- website_id,
- session_id,
- url: url?.substring(0, URL_LENGTH),
- referrer: referrer?.substring(0, URL_LENGTH),
- },
- });
-}
-
-async function clickhouseQuery(
- website_id,
- { session: { country, ...sessionArgs }, url, referrer },
-) {
- const { getDateFormat, sendMessage } = kafka;
- const params = {
- website_id: website_id,
- created_at: getDateFormat(new Date()),
- url: url?.substring(0, URL_LENGTH),
- referrer: referrer?.substring(0, URL_LENGTH),
- ...sessionArgs,
- country: country ? country : null,
- };
-
- await sendMessage(params, 'event');
-}
diff --git a/queries/analytics/pageview/savePageView.ts b/queries/analytics/pageview/savePageView.ts
new file mode 100644
index 00000000..ae702211
--- /dev/null
+++ b/queries/analytics/pageview/savePageView.ts
@@ -0,0 +1,67 @@
+import { URL_LENGTH, EVENT_TYPE } from 'lib/constants';
+import { CLICKHOUSE, PRISMA, runQuery } from 'lib/db';
+import kafka from 'lib/kafka';
+import prisma from 'lib/prisma';
+import cache from 'lib/cache';
+import { uuid } from 'lib/crypto';
+
+export async function savePageView(args: {
+ id: string;
+ websiteId: string;
+ url: string;
+ referrer?: string;
+ hostname?: string;
+ browser?: string;
+ os?: string;
+ device?: string;
+ screen?: string;
+ language?: string;
+ country?: string;
+}) {
+ return runQuery({
+ [PRISMA]: () => relationalQuery(args),
+ [CLICKHOUSE]: () => clickhouseQuery(args),
+ });
+}
+
+async function relationalQuery(data: {
+ id: string;
+ websiteId: string;
+ url: string;
+ referrer?: string;
+}) {
+ const { websiteId, id: sessionId, url, referrer } = data;
+
+ return prisma.client.websiteEvent.create({
+ data: {
+ id: uuid(),
+ websiteId,
+ sessionId,
+ url: url?.substring(0, URL_LENGTH),
+ referrer: referrer?.substring(0, URL_LENGTH),
+ eventType: EVENT_TYPE.pageView,
+ },
+ });
+}
+
+async function clickhouseQuery(data) {
+ const { websiteId, id: sessionId, url, referrer, country, ...args } = data;
+ const website = await cache.fetchWebsite(websiteId);
+ const { getDateFormat, sendMessage } = kafka;
+
+ const message = {
+ session_id: sessionId,
+ website_id: websiteId,
+ url: url?.substring(0, URL_LENGTH),
+ referrer: referrer?.substring(0, URL_LENGTH),
+ rev_id: website?.revId || 0,
+ created_at: getDateFormat(new Date()),
+ country: country ? country : null,
+ event_type: EVENT_TYPE.pageView,
+ ...args,
+ };
+
+ await sendMessage(message, 'event');
+
+ return data;
+}
diff --git a/queries/analytics/session/createSession.js b/queries/analytics/session/createSession.js
deleted file mode 100644
index 5130b960..00000000
--- a/queries/analytics/session/createSession.js
+++ /dev/null
@@ -1,65 +0,0 @@
-import { CLICKHOUSE, PRISMA, runQuery } from 'lib/db';
-import kafka from 'lib/kafka';
-import prisma from 'lib/prisma';
-import redis from 'lib/redis';
-
-export async function createSession(...args) {
- return runQuery({
- [PRISMA]: () => relationalQuery(...args),
- [CLICKHOUSE]: () => clickhouseQuery(...args),
- });
-}
-
-async function relationalQuery(website_id, data) {
- return prisma.client.session
- .create({
- data: {
- website_id,
- ...data,
- },
- select: {
- session_id: true,
- session_uuid: true,
- hostname: true,
- browser: true,
- os: true,
- screen: true,
- language: true,
- country: true,
- device: true,
- },
- })
- .then(async res => {
- if (redis.client && res) {
- await redis.client.set(`session:${res.session_uuid}`, res.session_id);
- }
-
- return res;
- });
-}
-
-async function clickhouseQuery(
- website_id,
- { session_uuid, hostname, browser, os, screen, language, country, device },
-) {
- const { getDateFormat, sendMessage } = kafka;
-
- const params = {
- session_uuid,
- website_id,
- created_at: getDateFormat(new Date()),
- hostname,
- browser,
- os,
- device,
- screen,
- language,
- country: country ? country : null,
- };
-
- await sendMessage(params, 'event');
-
- if (redis.client) {
- await redis.client.set(`session:${session_uuid}`, 1);
- }
-}
diff --git a/queries/analytics/session/createSession.ts b/queries/analytics/session/createSession.ts
new file mode 100644
index 00000000..fe15f11c
--- /dev/null
+++ b/queries/analytics/session/createSession.ts
@@ -0,0 +1,56 @@
+import { CLICKHOUSE, PRISMA, runQuery } from 'lib/db';
+import kafka from 'lib/kafka';
+import prisma from 'lib/prisma';
+import cache from 'lib/cache';
+import { Prisma } from '@prisma/client';
+
+export async function createSession(args: Prisma.SessionCreateInput) {
+ return runQuery({
+ [PRISMA]: () => relationalQuery(args),
+ [CLICKHOUSE]: () => clickhouseQuery(args),
+ }).then(async data => {
+ if (cache.enabled) {
+ await cache.storeSession(data);
+ }
+
+ return data;
+ });
+}
+
+async function relationalQuery(data: Prisma.SessionCreateInput) {
+ return prisma.client.session.create({ data });
+}
+
+async function clickhouseQuery(data: {
+ id: string;
+ websiteId: string;
+ hostname?: string;
+ browser?: string;
+ os?: string;
+ device?: string;
+ screen?: string;
+ language?: string;
+ country?: string;
+}) {
+ const { id, websiteId, hostname, browser, os, device, screen, language, country } = data;
+ const { getDateFormat, sendMessage } = kafka;
+ const website = await cache.fetchWebsite(websiteId);
+
+ const msg = {
+ session_id: id,
+ website_id: websiteId,
+ hostname,
+ browser,
+ os,
+ device,
+ screen,
+ language,
+ country,
+ rev_id: website?.revId || 0,
+ created_at: getDateFormat(new Date()),
+ };
+
+ await sendMessage(msg, 'event');
+
+ return data;
+}
diff --git a/queries/analytics/session/getSession.ts b/queries/analytics/session/getSession.ts
new file mode 100644
index 00000000..09b238f2
--- /dev/null
+++ b/queries/analytics/session/getSession.ts
@@ -0,0 +1,40 @@
+import clickhouse from 'lib/clickhouse';
+import { CLICKHOUSE, PRISMA, runQuery } from 'lib/db';
+import prisma from 'lib/prisma';
+import { Prisma } from '@prisma/client';
+
+export async function getSession(args: { id: string }) {
+ return runQuery({
+ [PRISMA]: () => relationalQuery(args),
+ [CLICKHOUSE]: () => clickhouseQuery(args),
+ });
+}
+
+async function relationalQuery(where: Prisma.SessionWhereUniqueInput) {
+ return prisma.client.session.findUnique({
+ where,
+ });
+}
+
+async function clickhouseQuery({ id: sessionId }: { id: string }) {
+ const { rawQuery, findFirst } = clickhouse;
+ const params = { sessionId };
+
+ return rawQuery(
+ `select
+ session_id,
+ website_id,
+ created_at,
+ hostname,
+ browser,
+ os,
+ device,
+ screen,
+ language,
+ country
+ from event
+ where session_id = {sessionId:UUID}
+ limit 1`,
+ params,
+ ).then(result => findFirst(result));
+}
diff --git a/queries/analytics/session/getSessionByUuid.js b/queries/analytics/session/getSessionByUuid.js
deleted file mode 100644
index a2b5754d..00000000
--- a/queries/analytics/session/getSessionByUuid.js
+++ /dev/null
@@ -1,57 +0,0 @@
-import clickhouse from 'lib/clickhouse';
-import { CLICKHOUSE, PRISMA, runQuery } from 'lib/db';
-import prisma from 'lib/prisma';
-import redis from 'lib/redis';
-
-export async function getSessionByUuid(...args) {
- return runQuery({
- [PRISMA]: () => relationalQuery(...args),
- [CLICKHOUSE]: () => clickhouseQuery(...args),
- });
-}
-
-async function relationalQuery(session_uuid) {
- return prisma.client.session
- .findUnique({
- where: {
- session_uuid,
- },
- })
- .then(async res => {
- if (redis.client && res) {
- await redis.client.set(`session:${res.session_uuid}`, res.session_id);
- }
-
- return res;
- });
-}
-
-async function clickhouseQuery(session_uuid) {
- const { rawQuery, findFirst } = clickhouse;
- const params = [session_uuid];
-
- return rawQuery(
- `select distinct
- session_uuid,
- website_id,
- created_at,
- hostname,
- browser,
- os,
- device,
- screen,
- language,
- country
- from event
- where session_uuid = $1`,
- params,
- )
- .then(result => findFirst(result))
- .then(async res => {
- if (redis.client && res) {
- await redis.client.set(`session:${res.session_uuid}`, 1);
- }
-
- return res;
- });
-}
diff --git a/queries/analytics/session/getSessionMetrics.js b/queries/analytics/session/getSessionMetrics.js
deleted file mode 100644
index 796a0682..00000000
--- a/queries/analytics/session/getSessionMetrics.js
+++ /dev/null
@@ -1,52 +0,0 @@
-import prisma from 'lib/prisma';
-import clickhouse from 'lib/clickhouse';
-import { runQuery, CLICKHOUSE, PRISMA } from 'lib/db';
-
-export async function getSessionMetrics(...args) {
- return runQuery({
- [PRISMA]: () => relationalQuery(...args),
- [CLICKHOUSE]: () => clickhouseQuery(...args),
- });
-}
-
-async function relationalQuery(website_id, { startDate, endDate, field, filters = {} }) {
- const { parseFilters, rawQuery } = prisma;
- const params = [website_id, startDate, endDate];
- const { pageviewQuery, sessionQuery, joinSession } = parseFilters(null, filters, params);
-
- return rawQuery(
- `select ${field} x, count(*) y
- from session as x
- where x.session_id in (
- select pageview.session_id
- from pageview
- ${joinSession}
- where pageview.website_id=$1
- and pageview.created_at between $2 and $3
- ${pageviewQuery}
- ${sessionQuery}
- )
- group by 1
- order by 2 desc`,
- params,
- );
-}
-
-async function clickhouseQuery(website_id, { startDate, endDate, field, filters = {} }) {
- const { parseFilters, getBetweenDates, rawQuery } = clickhouse;
- const params = [website_id];
- const { pageviewQuery, sessionQuery } = parseFilters(null, filters, params);
-
- return rawQuery(
- `select ${field} x, count(*) y
- from event as x
- where website_id=$1
- and event_name = ''
- and ${getBetweenDates('created_at', startDate, endDate)}
- ${pageviewQuery}
- ${sessionQuery}
- group by x
- order by y desc`,
- params,
- );
-}
diff --git a/queries/analytics/session/getSessionMetrics.ts b/queries/analytics/session/getSessionMetrics.ts
new file mode 100644
index 00000000..3465967e
--- /dev/null
+++ b/queries/analytics/session/getSessionMetrics.ts
@@ -0,0 +1,69 @@
+import prisma from 'lib/prisma';
+import clickhouse from 'lib/clickhouse';
+import { runQuery, CLICKHOUSE, PRISMA } from 'lib/db';
+import cache from 'lib/cache';
+import { EVENT_TYPE } from 'lib/constants';
+
+export async function getSessionMetrics(
+ ...args: [
+ websiteId: string,
+ data: { startDate: Date; endDate: Date; field: string; filters: object },
+ ]
+) {
+ return runQuery({
+ [PRISMA]: () => relationalQuery(...args),
+ [CLICKHOUSE]: () => clickhouseQuery(...args),
+ });
+}
+
+async function relationalQuery(
+ websiteId: string,
+ data: { startDate: Date; endDate: Date; field: string; filters: object },
+) {
+ const { startDate, endDate, field, filters = {} } = data;
+ const { toUuid, parseFilters, rawQuery } = prisma;
+ const params: any = [websiteId, startDate, endDate];
+ const { filterQuery, joinSession } = parseFilters(filters, params);
+
+ return rawQuery(
+ `select ${field} x, count(*) y
+ from session as x
+ where x.session_id in (
+ select website_event.session_id
+ from website_event
+ join website
+ on website_event.website_id = website.website_id
+ ${joinSession}
+ where website.website_id = $1${toUuid()}
+ and website_event.created_at between $2 and $3
+ ${filterQuery}
+ )
+ group by 1
+ order by 2 desc`,
+ params,
+ );
+}
+
+async function clickhouseQuery(
+ websiteId: string,
+ data: { startDate: Date; endDate: Date; field: string; filters: object },
+) {
+ const { startDate, endDate, field, filters = {} } = data;
+ const { parseFilters, getBetweenDates, rawQuery } = clickhouse;
+ const website = await cache.fetchWebsite(websiteId);
+ const params = { websiteId, revId: website?.revId || 0 };
+ const { filterQuery } = parseFilters(filters, params);
+
+ return rawQuery(
+ `select ${field} x, count(distinct session_id) y
+ from event as x
+ where website_id = {websiteId:UUID}
+ and rev_id = {revId:UInt32}
+ and event_type = ${EVENT_TYPE.pageView}
+ and ${getBetweenDates('created_at', startDate, endDate)}
+ ${filterQuery}
+ group by x
+ order by y desc`,
+ params,
+ );
+}
diff --git a/queries/analytics/session/getSessions.js b/queries/analytics/session/getSessions.js
index 7c47ce70..c5fed485 100644
--- a/queries/analytics/session/getSessions.js
+++ b/queries/analytics/session/getSessions.js
@@ -14,14 +14,12 @@ async function relationalQuery(websites, start_at) {
where: {
...(websites && websites.length > 0
? {
- website: {
- website_id: {
- in: websites,
- },
+ websiteId: {
+ in: websites,
},
}
: {}),
- created_at: {
+ createdAt: {
gte: start_at,
},
},
@@ -29,11 +27,11 @@ async function relationalQuery(websites, start_at) {
}
async function clickhouseQuery(websites, start_at) {
- const { rawQuery, getDateFormat } = clickhouse;
+ const { rawQuery, getDateFormat, getCommaSeparatedStringFormat } = clickhouse;
return rawQuery(
`select distinct
- session_uuid,
+ session_id,
website_id,
created_at,
hostname,
@@ -44,7 +42,11 @@ async function clickhouseQuery(websites, start_at) {
language,
country
from event
- where ${websites && websites.length > 0 ? `website_id in (${websites.join(',')})` : '0 = 0'}
+ where ${
+ websites && websites.length > 0
+ ? `website_id in (${getCommaSeparatedStringFormat(websites)})`
+ : '0 = 0'
+ }
and created_at >= ${getDateFormat(start_at)}`,
);
}
diff --git a/queries/analytics/stats/getActiveVisitors.js b/queries/analytics/stats/getActiveVisitors.js
deleted file mode 100644
index efc6a8c2..00000000
--- a/queries/analytics/stats/getActiveVisitors.js
+++ /dev/null
@@ -1,37 +0,0 @@
-import { subMinutes } from 'date-fns';
-import prisma from 'lib/prisma';
-import clickhouse from 'lib/clickhouse';
-import { runQuery, CLICKHOUSE, PRISMA } from 'lib/db';
-
-export async function getActiveVisitors(...args) {
- return runQuery({
- [PRISMA]: () => relationalQuery(...args),
- [CLICKHOUSE]: () => clickhouseQuery(...args),
- });
-}
-
-async function relationalQuery(website_id) {
- const date = subMinutes(new Date(), 5);
- const params = [website_id, date];
-
- return prisma.rawQuery(
- `select count(distinct session_id) x
- from pageview
- where website_id = $1
- and created_at >= $2`,
- params,
- );
-}
-
-async function clickhouseQuery(website_id) {
- const { rawQuery, getDateFormat } = clickhouse;
- const params = [website_id];
-
- return rawQuery(
- `select count(distinct session_uuid) x
- from event
- where website_id = $1
- and created_at >= ${getDateFormat(subMinutes(new Date(), 5))}`,
- params,
- );
-}
diff --git a/queries/analytics/stats/getActiveVisitors.ts b/queries/analytics/stats/getActiveVisitors.ts
new file mode 100644
index 00000000..60a1e5c1
--- /dev/null
+++ b/queries/analytics/stats/getActiveVisitors.ts
@@ -0,0 +1,41 @@
+import { subMinutes } from 'date-fns';
+import prisma from 'lib/prisma';
+import clickhouse from 'lib/clickhouse';
+import { runQuery, CLICKHOUSE, PRISMA } from 'lib/db';
+
+export async function getActiveVisitors(...args: [websiteId: string]) {
+ return runQuery({
+ [PRISMA]: () => relationalQuery(...args),
+ [CLICKHOUSE]: () => clickhouseQuery(...args),
+ });
+}
+
+async function relationalQuery(websiteId: string) {
+ const { toUuid, rawQuery } = prisma;
+
+ const date = subMinutes(new Date(), 5);
+ const params: any = [websiteId, date];
+
+ return rawQuery(
+ `select count(distinct session_id) x
+ from website_event
+ join website
+ on website_event.website_id = website.website_id
+ where website.website_id = $1${toUuid()}
+ and website_event.created_at >= $2`,
+ params,
+ );
+}
+
+async function clickhouseQuery(websiteId: string) {
+ const { rawQuery } = clickhouse;
+ const params = { websiteId, startAt: subMinutes(new Date(), 5) };
+
+ return rawQuery(
+ `select count(distinct session_id) x
+ from event
+ where website_id = {websiteId:UUID}
+ and created_at >= {startAt:DateTime('UTC')}`,
+ params,
+ );
+}
diff --git a/queries/analytics/stats/getRealtimeData.js b/queries/analytics/stats/getRealtimeData.ts
similarity index 62%
rename from queries/analytics/stats/getRealtimeData.js
rename to queries/analytics/stats/getRealtimeData.ts
index 313d757d..659f6145 100644
--- a/queries/analytics/stats/getRealtimeData.js
+++ b/queries/analytics/stats/getRealtimeData.ts
@@ -10,19 +10,19 @@ export async function getRealtimeData(websites, time) {
]);
return {
- pageviews: pageviews.map(({ view_id, ...props }) => ({
- __id: `p${view_id}`,
- view_id,
+ pageviews: pageviews.map(({ id, ...props }) => ({
+ __id: `p${id}`,
+ pageviewId: id,
...props,
})),
- sessions: sessions.map(({ session_id, ...props }) => ({
- __id: `s${session_id}`,
- session_id,
+ sessions: sessions.map(({ id, ...props }) => ({
+ __id: `s${id}`,
+ sessionId: id,
...props,
})),
- events: events.map(({ event_id, ...props }) => ({
- __id: `e${event_id}`,
- event_id,
+ events: events.map(({ id, ...props }) => ({
+ __id: `e${id}`,
+ eventId: id,
...props,
})),
timestamp: Date.now(),
diff --git a/queries/analytics/stats/getWebsiteStats.js b/queries/analytics/stats/getWebsiteStats.js
deleted file mode 100644
index 0c3d432a..00000000
--- a/queries/analytics/stats/getWebsiteStats.js
+++ /dev/null
@@ -1,71 +0,0 @@
-import prisma from 'lib/prisma';
-import clickhouse from 'lib/clickhouse';
-import { runQuery, CLICKHOUSE, PRISMA } from 'lib/db';
-
-export async function getWebsiteStats(...args) {
- return runQuery({
- [PRISMA]: () => relationalQuery(...args),
- [CLICKHOUSE]: () => clickhouseQuery(...args),
- });
-}
-
-async function relationalQuery(website_id, { start_at, end_at, filters = {} }) {
- const { getDateQuery, getTimestampInterval, parseFilters, rawQuery } = prisma;
- const params = [website_id, start_at, end_at];
- const { pageviewQuery, sessionQuery, joinSession } = parseFilters(
- 'pageview',
- null,
- filters,
- params,
- );
-
- return rawQuery(
- `select sum(t.c) as "pageviews",
- count(distinct t.session_id) as "uniques",
- sum(case when t.c = 1 then 1 else 0 end) as "bounces",
- sum(t.time) as "totaltime"
- from (
- select pageview.session_id,
- ${getDateQuery('pageview.created_at', 'hour')},
- count(*) c,
- ${getTimestampInterval('pageview.created_at')} as "time"
- from pageview
- ${joinSession}
- where pageview.website_id=$1
- and pageview.created_at between $2 and $3
- ${pageviewQuery}
- ${sessionQuery}
- group by 1, 2
- ) t`,
- params,
- );
-}
-
-async function clickhouseQuery(website_id, { start_at, end_at, filters = {} }) {
- const { rawQuery, getDateQuery, getBetweenDates, parseFilters } = clickhouse;
- const params = [website_id];
- const { pageviewQuery, sessionQuery } = parseFilters(null, filters, params);
-
- return rawQuery(
- `select
- sum(t.c) as "pageviews",
- count(distinct t.session_uuid) as "uniques",
- sum(if(t.c = 1, 1, 0)) as "bounces",
- sum(if(max_time < min_time + interval 1 hour, max_time-min_time, 0)) as "totaltime"
- from (
- select session_uuid,
- ${getDateQuery('created_at', 'day')} time_series,
- count(*) c,
- min(created_at) min_time,
- max(created_at) max_time
- from event
- where event_name = ''
- and website_id = $1
- and ${getBetweenDates('created_at', start_at, end_at)}
- ${pageviewQuery}
- ${sessionQuery}
- group by session_uuid, time_series
- ) t;`,
- params,
- );
-}
diff --git a/queries/analytics/stats/getWebsiteStats.ts b/queries/analytics/stats/getWebsiteStats.ts
new file mode 100644
index 00000000..73d28fb6
--- /dev/null
+++ b/queries/analytics/stats/getWebsiteStats.ts
@@ -0,0 +1,80 @@
+import prisma from 'lib/prisma';
+import clickhouse from 'lib/clickhouse';
+import { runQuery, CLICKHOUSE, PRISMA } from 'lib/db';
+import cache from 'lib/cache';
+import { EVENT_TYPE } from 'lib/constants';
+
+export async function getWebsiteStats(
+ ...args: [websiteId: string, data: { startDate: Date; endDate: Date; filters: object }]
+) {
+ return runQuery({
+ [PRISMA]: () => relationalQuery(...args),
+ [CLICKHOUSE]: () => clickhouseQuery(...args),
+ });
+}
+
+async function relationalQuery(
+ websiteId: string,
+ data: { startDate: Date; endDate: Date; filters: object },
+) {
+ const { startDate, endDate, filters = {} } = data;
+ const { toUuid, getDateQuery, getTimestampInterval, parseFilters, rawQuery } = prisma;
+ const params: any = [websiteId, startDate, endDate];
+ const { filterQuery, joinSession } = parseFilters(filters, params);
+
+ return rawQuery(
+ `select sum(t.c) as "pageviews",
+ count(distinct t.session_id) as "uniques",
+ sum(case when t.c = 1 then 1 else 0 end) as "bounces",
+ sum(t.time) as "totaltime"
+ from (
+ select website_event.session_id,
+ ${getDateQuery('website_event.created_at', 'hour')},
+ count(*) c,
+ ${getTimestampInterval('website_event.created_at')} as "time"
+ from website_event
+ join website
+ on website_event.website_id = website.website_id
+ ${joinSession}
+ where website.website_id = $1${toUuid()}
+ and website_event.created_at between $2 and $3
+ ${filterQuery}
+ group by 1, 2
+ ) t`,
+ params,
+ );
+}
+
+async function clickhouseQuery(
+ websiteId: string,
+ data: { startDate: Date; endDate: Date; filters: object },
+) {
+ const { startDate, endDate, filters = {} } = data;
+ const { rawQuery, getDateQuery, getBetweenDates, parseFilters } = clickhouse;
+ const website = await cache.fetchWebsite(websiteId);
+ const params = { websiteId, revId: website?.revId || 0 };
+ const { filterQuery } = parseFilters(filters, params);
+
+ return rawQuery(
+ `select
+ sum(t.c) as "pageviews",
+ count(distinct t.session_id) as "uniques",
+ sum(if(t.c = 1, 1, 0)) as "bounces",
+ sum(if(max_time < min_time + interval 1 hour, max_time-min_time, 0)) as "totaltime"
+ from (
+ select session_id,
+ ${getDateQuery('created_at', 'day')} time_series,
+ count(*) c,
+ min(created_at) min_time,
+ max(created_at) max_time
+ from event
+ where event_type = ${EVENT_TYPE.pageView}
+ and website_id = {websiteId:UUID}
+ and rev_id = {revId:UInt32}
+ and ${getBetweenDates('created_at', startDate, endDate)}
+ ${filterQuery}
+ group by session_id, time_series
+ ) t;`,
+ params,
+ );
+}
diff --git a/queries/index.js b/queries/index.js
index 35d79215..2d1931ee 100644
--- a/queries/index.js
+++ b/queries/index.js
@@ -1,29 +1,17 @@
-export * from './admin/account/createAccount';
-export * from './admin/account/deleteAccount';
-export * from './admin/account/getAccount';
-export * from './admin/account/getAccountById';
-export * from './admin/account/getAccountByUsername';
-export * from './admin/account/getAccounts';
-export * from './admin/account/updateAccount';
-export * from './admin/website/createWebsite';
-export * from './admin/website/deleteWebsite';
-export * from './admin/website/getAllWebsites';
-export * from './admin/website/getUserWebsites';
-export * from './admin/website/getWebsiteById';
-export * from './admin/website/getWebsiteByShareId';
-export * from './admin/website/getWebsiteByUuid';
-export * from './admin/website/resetWebsite';
-export * from './admin/website/updateWebsite';
+export * from './admin/team';
+export * from './admin/teamUser';
+export * from './admin/user';
+export * from './admin/website';
export * from './analytics/event/getEventMetrics';
export * from './analytics/event/getEvents';
+export * from './analytics/event/getEventData';
export * from './analytics/event/saveEvent';
export * from './analytics/pageview/getPageviewMetrics';
-export * from './analytics/pageview/getPageviewParams';
export * from './analytics/pageview/getPageviews';
export * from './analytics/pageview/getPageviewStats';
export * from './analytics/pageview/savePageView';
export * from './analytics/session/createSession';
-export * from './analytics/session/getSessionByUuid';
+export * from './analytics/session/getSession';
export * from './analytics/session/getSessionMetrics';
export * from './analytics/session/getSessions';
export * from './analytics/stats/getActiveVisitors';
diff --git a/scripts/build-geo.js b/scripts/build-geo.js
index a4554739..2ee601db 100644
--- a/scripts/build-geo.js
+++ b/scripts/build-geo.js
@@ -1,3 +1,4 @@
+/* eslint-disable no-console */
require('dotenv').config();
const fs = require('fs');
const path = require('path');
diff --git a/scripts/change-password.js b/scripts/change-password.js
index a9b63c12..b12373a9 100644
--- a/scripts/change-password.js
+++ b/scripts/change-password.js
@@ -13,9 +13,9 @@ const runQuery = async query => {
});
};
-const updateAccountByUsername = (username, data) => {
+const updateUserByUsername = (username, data) => {
return runQuery(
- prisma.account.update({
+ prisma.user.update({
where: {
username,
},
@@ -26,7 +26,7 @@ const updateAccountByUsername = (username, data) => {
const changePassword = async (username, newPassword) => {
const password = hashPassword(newPassword);
- return updateAccountByUsername(username, { password });
+ return updateUserByUsername(username, { password });
};
const getUsernameAndPassword = async () => {
@@ -40,7 +40,7 @@ const getUsernameAndPassword = async () => {
questions.push({
type: 'text',
name: 'username',
- message: 'Enter account to change password',
+ message: 'Enter user to change password',
});
}
if (!password) {
@@ -84,7 +84,7 @@ const getUsernameAndPassword = async () => {
console.log('Password changed for user', chalk.greenBright(username));
} catch (error) {
if (error.meta.cause.includes('Record to update not found')) {
- console.log('Account not found:', chalk.redBright(username));
+ console.log('User not found:', chalk.redBright(username));
} else {
throw error;
}
diff --git a/scripts/check-db.js b/scripts/check-db.js
index d5cc2a64..9b5a47a8 100644
--- a/scripts/check-db.js
+++ b/scripts/check-db.js
@@ -40,7 +40,7 @@ async function checkConnection() {
async function checkTables() {
try {
- await prisma.$queryRaw`select * from account limit 1`;
+ await prisma.$queryRaw`select * from user limit 1`;
success('Database tables found.');
} catch (e) {
diff --git a/scripts/check-lang.js b/scripts/check-lang.js
index a916180a..e5a0bf09 100644
--- a/scripts/check-lang.js
+++ b/scripts/check-lang.js
@@ -1,3 +1,4 @@
+/* eslint-disable no-console */
const fs = require('fs');
const path = require('path');
const chalk = require('chalk');
diff --git a/scripts/copy-db-files.js b/scripts/copy-db-files.js
index 3e902d45..15c34674 100644
--- a/scripts/copy-db-files.js
+++ b/scripts/copy-db-files.js
@@ -1,3 +1,4 @@
+/* eslint-disable no-console */
require('dotenv').config();
const fse = require('fs-extra');
const path = require('path');
diff --git a/scripts/download-country-names.js b/scripts/download-country-names.js
index a4116498..a180e7af 100644
--- a/scripts/download-country-names.js
+++ b/scripts/download-country-names.js
@@ -1,3 +1,4 @@
+/* eslint-disable no-console */
const fs = require('fs-extra');
const path = require('path');
const https = require('https');
diff --git a/scripts/download-language-names.js b/scripts/download-language-names.js
index a804763d..5cea88cf 100644
--- a/scripts/download-language-names.js
+++ b/scripts/download-language-names.js
@@ -1,3 +1,4 @@
+/* eslint-disable no-console */
const fs = require('fs-extra');
const path = require('path');
const https = require('https');
diff --git a/scripts/merge-lang.js b/scripts/merge-lang.js
index f1b86df9..4cdd201c 100644
--- a/scripts/merge-lang.js
+++ b/scripts/merge-lang.js
@@ -1,3 +1,4 @@
+/* eslint-disable no-console */
const fs = require('fs');
const path = require('path');
const prettier = require('prettier');
diff --git a/scripts/update-tracker.js b/scripts/update-tracker.js
index 6b9e96c7..fc8ad8b8 100644
--- a/scripts/update-tracker.js
+++ b/scripts/update-tracker.js
@@ -1,3 +1,4 @@
+/* eslint-disable no-console */
require('dotenv').config();
const fs = require('fs');
const path = require('path');
diff --git a/sql/schema.mysql.sql b/sql/schema.mysql.sql
deleted file mode 100644
index 0ae7775a..00000000
--- a/sql/schema.mysql.sql
+++ /dev/null
@@ -1,102 +0,0 @@
--- CreateTable
-CREATE TABLE `account` (
- `user_id` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
- `username` VARCHAR(255) NOT NULL,
- `password` VARCHAR(60) NOT NULL,
- `is_admin` BOOLEAN NOT NULL DEFAULT false,
- `created_at` TIMESTAMP(0) NULL DEFAULT CURRENT_TIMESTAMP(0),
- `updated_at` TIMESTAMP(0) NULL DEFAULT CURRENT_TIMESTAMP(0),
-
- UNIQUE INDEX `username`(`username`),
- PRIMARY KEY (`user_id`)
-) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-
--- CreateTable
-CREATE TABLE `event` (
- `event_id` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
- `website_id` INTEGER UNSIGNED NOT NULL,
- `session_id` INTEGER UNSIGNED NOT NULL,
- `created_at` TIMESTAMP(0) NULL DEFAULT CURRENT_TIMESTAMP(0),
- `url` VARCHAR(500) NOT NULL,
- `event_type` VARCHAR(50) NOT NULL,
- `event_value` VARCHAR(50) NOT NULL,
-
- INDEX `event_created_at_idx`(`created_at`),
- INDEX `event_session_id_idx`(`session_id`),
- INDEX `event_website_id_idx`(`website_id`),
- PRIMARY KEY (`event_id`)
-) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-
--- CreateTable
-CREATE TABLE `pageview` (
- `view_id` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
- `website_id` INTEGER UNSIGNED NOT NULL,
- `session_id` INTEGER UNSIGNED NOT NULL,
- `created_at` TIMESTAMP(0) NULL DEFAULT CURRENT_TIMESTAMP(0),
- `url` VARCHAR(500) NOT NULL,
- `referrer` VARCHAR(500) NULL,
-
- INDEX `pageview_created_at_idx`(`created_at`),
- INDEX `pageview_session_id_idx`(`session_id`),
- INDEX `pageview_website_id_created_at_idx`(`website_id`, `created_at`),
- INDEX `pageview_website_id_idx`(`website_id`),
- INDEX `pageview_website_id_session_id_created_at_idx`(`website_id`, `session_id`, `created_at`),
- PRIMARY KEY (`view_id`)
-) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-
--- CreateTable
-CREATE TABLE `session` (
- `session_id` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
- `session_uuid` VARCHAR(36) NOT NULL,
- `website_id` INTEGER UNSIGNED NOT NULL,
- `created_at` TIMESTAMP(0) NULL DEFAULT CURRENT_TIMESTAMP(0),
- `hostname` VARCHAR(100) NULL,
- `browser` VARCHAR(20) NULL,
- `os` VARCHAR(20) NULL,
- `device` VARCHAR(20) NULL,
- `screen` VARCHAR(11) NULL,
- `language` VARCHAR(35) NULL,
- `country` CHAR(2) NULL,
-
- UNIQUE INDEX `session_uuid`(`session_uuid`),
- INDEX `session_created_at_idx`(`created_at`),
- INDEX `session_website_id_idx`(`website_id`),
- PRIMARY KEY (`session_id`)
-) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-
--- CreateTable
-CREATE TABLE `website` (
- `website_id` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
- `website_uuid` VARCHAR(36) NOT NULL,
- `user_id` INTEGER UNSIGNED NOT NULL,
- `name` VARCHAR(100) NOT NULL,
- `domain` VARCHAR(500) NULL,
- `share_id` VARCHAR(64) NULL,
- `created_at` TIMESTAMP(0) NULL DEFAULT CURRENT_TIMESTAMP(0),
-
- UNIQUE INDEX `website_uuid`(`website_uuid`),
- UNIQUE INDEX `share_id`(`share_id`),
- INDEX `website_user_id_idx`(`user_id`),
- PRIMARY KEY (`website_id`)
-) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-
--- AddForeignKey
-ALTER TABLE `event` ADD CONSTRAINT `event_ibfk_2` FOREIGN KEY (`session_id`) REFERENCES `session`(`session_id`) ON DELETE CASCADE ON UPDATE NO ACTION;
-
--- AddForeignKey
-ALTER TABLE `event` ADD CONSTRAINT `event_ibfk_1` FOREIGN KEY (`website_id`) REFERENCES `website`(`website_id`) ON DELETE CASCADE ON UPDATE NO ACTION;
-
--- AddForeignKey
-ALTER TABLE `pageview` ADD CONSTRAINT `pageview_ibfk_2` FOREIGN KEY (`session_id`) REFERENCES `session`(`session_id`) ON DELETE CASCADE ON UPDATE NO ACTION;
-
--- AddForeignKey
-ALTER TABLE `pageview` ADD CONSTRAINT `pageview_ibfk_1` FOREIGN KEY (`website_id`) REFERENCES `website`(`website_id`) ON DELETE CASCADE ON UPDATE NO ACTION;
-
--- AddForeignKey
-ALTER TABLE `session` ADD CONSTRAINT `session_ibfk_1` FOREIGN KEY (`website_id`) REFERENCES `website`(`website_id`) ON DELETE CASCADE ON UPDATE NO ACTION;
-
--- AddForeignKey
-ALTER TABLE `website` ADD CONSTRAINT `website_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `account`(`user_id`) ON DELETE CASCADE ON UPDATE NO ACTION;
-
--- CreateAdminUser
-INSERT INTO account (username, password, is_admin) values ('admin', '$2b$10$BUli0c.muyCW1ErNJc3jL.vFRFtFJWrT8/GcR4A.sUdCznaXiqFXa', true);
diff --git a/sql/schema.postgresql.sql b/sql/schema.postgresql.sql
deleted file mode 100644
index cdabcd17..00000000
--- a/sql/schema.postgresql.sql
+++ /dev/null
@@ -1,132 +0,0 @@
--- CreateTable
-CREATE TABLE "account" (
- "user_id" SERIAL NOT NULL,
- "username" VARCHAR(255) NOT NULL,
- "password" VARCHAR(60) NOT NULL,
- "is_admin" BOOLEAN NOT NULL DEFAULT false,
- "created_at" TIMESTAMPTZ(6) DEFAULT CURRENT_TIMESTAMP,
- "updated_at" TIMESTAMPTZ(6) DEFAULT CURRENT_TIMESTAMP,
-
- PRIMARY KEY ("user_id")
-);
-
--- CreateTable
-CREATE TABLE "event" (
- "event_id" SERIAL NOT NULL,
- "website_id" INTEGER NOT NULL,
- "session_id" INTEGER NOT NULL,
- "created_at" TIMESTAMPTZ(6) DEFAULT CURRENT_TIMESTAMP,
- "url" VARCHAR(500) NOT NULL,
- "event_type" VARCHAR(50) NOT NULL,
- "event_value" VARCHAR(50) NOT NULL,
-
- PRIMARY KEY ("event_id")
-);
-
--- CreateTable
-CREATE TABLE "pageview" (
- "view_id" SERIAL NOT NULL,
- "website_id" INTEGER NOT NULL,
- "session_id" INTEGER NOT NULL,
- "created_at" TIMESTAMPTZ(6) DEFAULT CURRENT_TIMESTAMP,
- "url" VARCHAR(500) NOT NULL,
- "referrer" VARCHAR(500),
-
- PRIMARY KEY ("view_id")
-);
-
--- CreateTable
-CREATE TABLE "session" (
- "session_id" SERIAL NOT NULL,
- "session_uuid" UUID NOT NULL,
- "website_id" INTEGER NOT NULL,
- "created_at" TIMESTAMPTZ(6) DEFAULT CURRENT_TIMESTAMP,
- "hostname" VARCHAR(100),
- "browser" VARCHAR(20),
- "os" VARCHAR(20),
- "device" VARCHAR(20),
- "screen" VARCHAR(11),
- "language" VARCHAR(35),
- "country" CHAR(2),
-
- PRIMARY KEY ("session_id")
-);
-
--- CreateTable
-CREATE TABLE "website" (
- "website_id" SERIAL NOT NULL,
- "website_uuid" UUID NOT NULL,
- "user_id" INTEGER NOT NULL,
- "name" VARCHAR(100) NOT NULL,
- "domain" VARCHAR(500),
- "share_id" VARCHAR(64),
- "created_at" TIMESTAMPTZ(6) DEFAULT CURRENT_TIMESTAMP,
-
- PRIMARY KEY ("website_id")
-);
-
--- CreateIndex
-CREATE UNIQUE INDEX "account.username_unique" ON "account"("username");
-
--- CreateIndex
-CREATE INDEX "event_created_at_idx" ON "event"("created_at");
-
--- CreateIndex
-CREATE INDEX "event_session_id_idx" ON "event"("session_id");
-
--- CreateIndex
-CREATE INDEX "event_website_id_idx" ON "event"("website_id");
-
--- CreateIndex
-CREATE INDEX "pageview_created_at_idx" ON "pageview"("created_at");
-
--- CreateIndex
-CREATE INDEX "pageview_session_id_idx" ON "pageview"("session_id");
-
--- CreateIndex
-CREATE INDEX "pageview_website_id_created_at_idx" ON "pageview"("website_id", "created_at");
-
--- CreateIndex
-CREATE INDEX "pageview_website_id_idx" ON "pageview"("website_id");
-
--- CreateIndex
-CREATE INDEX "pageview_website_id_session_id_created_at_idx" ON "pageview"("website_id", "session_id", "created_at");
-
--- CreateIndex
-CREATE UNIQUE INDEX "session.session_uuid_unique" ON "session"("session_uuid");
-
--- CreateIndex
-CREATE INDEX "session_created_at_idx" ON "session"("created_at");
-
--- CreateIndex
-CREATE INDEX "session_website_id_idx" ON "session"("website_id");
-
--- CreateIndex
-CREATE UNIQUE INDEX "website.website_uuid_unique" ON "website"("website_uuid");
-
--- CreateIndex
-CREATE UNIQUE INDEX "website.share_id_unique" ON "website"("share_id");
-
--- CreateIndex
-CREATE INDEX "website_user_id_idx" ON "website"("user_id");
-
--- AddForeignKey
-ALTER TABLE "event" ADD FOREIGN KEY ("session_id") REFERENCES "session"("session_id") ON DELETE CASCADE ON UPDATE CASCADE;
-
--- AddForeignKey
-ALTER TABLE "event" ADD FOREIGN KEY ("website_id") REFERENCES "website"("website_id") ON DELETE CASCADE ON UPDATE CASCADE;
-
--- AddForeignKey
-ALTER TABLE "pageview" ADD FOREIGN KEY ("session_id") REFERENCES "session"("session_id") ON DELETE CASCADE ON UPDATE CASCADE;
-
--- AddForeignKey
-ALTER TABLE "pageview" ADD FOREIGN KEY ("website_id") REFERENCES "website"("website_id") ON DELETE CASCADE ON UPDATE CASCADE;
-
--- AddForeignKey
-ALTER TABLE "session" ADD FOREIGN KEY ("website_id") REFERENCES "website"("website_id") ON DELETE CASCADE ON UPDATE CASCADE;
-
--- AddForeignKey
-ALTER TABLE "website" ADD FOREIGN KEY ("user_id") REFERENCES "account"("user_id") ON DELETE CASCADE ON UPDATE CASCADE;
-
--- CreateAdminUser
-INSERT INTO account (username, password, is_admin) values ('admin', '$2b$10$BUli0c.muyCW1ErNJc3jL.vFRFtFJWrT8/GcR4A.sUdCznaXiqFXa', true);
diff --git a/styles/bootstrap-grid.css b/styles/bootstrap-grid.css
deleted file mode 100644
index 8358a0fd..00000000
--- a/styles/bootstrap-grid.css
+++ /dev/null
@@ -1,3981 +0,0 @@
-/*!
- * Bootstrap Grid v4.5.0 (https://getbootstrap.com/)
- * Copyright 2011-2020 The Bootstrap Authors
- * Copyright 2011-2020 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- */
-html {
- box-sizing: border-box;
- -ms-overflow-style: scrollbar;
-}
-
-*,
-*::before,
-*::after {
- box-sizing: inherit;
-}
-
-.container {
- width: 100%;
- padding-right: 15px;
- padding-left: 15px;
- margin-right: auto;
- margin-left: auto;
-}
-
-@media (min-width: 576px) {
- .container {
- max-width: 540px;
- }
-}
-
-@media (min-width: 768px) {
- .container {
- max-width: 720px;
- }
-}
-
-@media (min-width: 992px) {
- .container {
- max-width: 960px;
- }
-}
-
-@media (min-width: 1200px) {
- .container {
- max-width: 1140px;
- }
-}
-
-.container-fluid,
-.container-sm,
-.container-md,
-.container-lg,
-.container-xl {
- width: 100%;
- padding-right: 15px;
- padding-left: 15px;
- margin-right: auto;
- margin-left: auto;
-}
-
-@media (min-width: 576px) {
- .container,
- .container-sm {
- max-width: 540px;
- }
-}
-
-@media (min-width: 768px) {
- .container,
- .container-sm,
- .container-md {
- max-width: 720px;
- }
-}
-
-@media (min-width: 992px) {
- .container,
- .container-sm,
- .container-md,
- .container-lg {
- max-width: 960px;
- }
-}
-
-@media (min-width: 1200px) {
- .container,
- .container-sm,
- .container-md,
- .container-lg,
- .container-xl {
- max-width: 1140px;
- }
-}
-
-.row {
- display: -ms-flexbox;
- display: flex;
- -ms-flex-wrap: wrap;
- flex-wrap: wrap;
- margin-right: -15px;
- margin-left: -15px;
-}
-
-.no-gutters {
- margin-right: 0;
- margin-left: 0;
-}
-
-.no-gutters > .col,
-.no-gutters > [class*='col-'] {
- padding-right: 0;
- padding-left: 0;
-}
-
-.col-1,
-.col-2,
-.col-3,
-.col-4,
-.col-5,
-.col-6,
-.col-7,
-.col-8,
-.col-9,
-.col-10,
-.col-11,
-.col-12,
-.col,
-.col-auto,
-.col-sm-1,
-.col-sm-2,
-.col-sm-3,
-.col-sm-4,
-.col-sm-5,
-.col-sm-6,
-.col-sm-7,
-.col-sm-8,
-.col-sm-9,
-.col-sm-10,
-.col-sm-11,
-.col-sm-12,
-.col-sm,
-.col-sm-auto,
-.col-md-1,
-.col-md-2,
-.col-md-3,
-.col-md-4,
-.col-md-5,
-.col-md-6,
-.col-md-7,
-.col-md-8,
-.col-md-9,
-.col-md-10,
-.col-md-11,
-.col-md-12,
-.col-md,
-.col-md-auto,
-.col-lg-1,
-.col-lg-2,
-.col-lg-3,
-.col-lg-4,
-.col-lg-5,
-.col-lg-6,
-.col-lg-7,
-.col-lg-8,
-.col-lg-9,
-.col-lg-10,
-.col-lg-11,
-.col-lg-12,
-.col-lg,
-.col-lg-auto,
-.col-xl-1,
-.col-xl-2,
-.col-xl-3,
-.col-xl-4,
-.col-xl-5,
-.col-xl-6,
-.col-xl-7,
-.col-xl-8,
-.col-xl-9,
-.col-xl-10,
-.col-xl-11,
-.col-xl-12,
-.col-xl,
-.col-xl-auto {
- position: relative;
- width: 100%;
- padding-right: 15px;
- padding-left: 15px;
-}
-
-.col {
- -ms-flex-preferred-size: 0;
- flex-basis: 0;
- -ms-flex-positive: 1;
- flex-grow: 1;
- min-width: 0;
- max-width: 100%;
-}
-
-.row-cols-1 > * {
- -ms-flex: 0 0 100%;
- flex: 0 0 100%;
- max-width: 100%;
-}
-
-.row-cols-2 > * {
- -ms-flex: 0 0 50%;
- flex: 0 0 50%;
- max-width: 50%;
-}
-
-.row-cols-3 > * {
- -ms-flex: 0 0 33.333333%;
- flex: 0 0 33.333333%;
- max-width: 33.333333%;
-}
-
-.row-cols-4 > * {
- -ms-flex: 0 0 25%;
- flex: 0 0 25%;
- max-width: 25%;
-}
-
-.row-cols-5 > * {
- -ms-flex: 0 0 20%;
- flex: 0 0 20%;
- max-width: 20%;
-}
-
-.row-cols-6 > * {
- -ms-flex: 0 0 16.666667%;
- flex: 0 0 16.666667%;
- max-width: 16.666667%;
-}
-
-.col-auto {
- -ms-flex: 0 0 auto;
- flex: 0 0 auto;
- width: auto;
- max-width: 100%;
-}
-
-.col-1 {
- -ms-flex: 0 0 8.333333%;
- flex: 0 0 8.333333%;
- max-width: 8.333333%;
-}
-
-.col-2 {
- -ms-flex: 0 0 16.666667%;
- flex: 0 0 16.666667%;
- max-width: 16.666667%;
-}
-
-.col-3 {
- -ms-flex: 0 0 25%;
- flex: 0 0 25%;
- max-width: 25%;
-}
-
-.col-4 {
- -ms-flex: 0 0 33.333333%;
- flex: 0 0 33.333333%;
- max-width: 33.333333%;
-}
-
-.col-5 {
- -ms-flex: 0 0 41.666667%;
- flex: 0 0 41.666667%;
- max-width: 41.666667%;
-}
-
-.col-6 {
- -ms-flex: 0 0 50%;
- flex: 0 0 50%;
- max-width: 50%;
-}
-
-.col-7 {
- -ms-flex: 0 0 58.333333%;
- flex: 0 0 58.333333%;
- max-width: 58.333333%;
-}
-
-.col-8 {
- -ms-flex: 0 0 66.666667%;
- flex: 0 0 66.666667%;
- max-width: 66.666667%;
-}
-
-.col-9 {
- -ms-flex: 0 0 75%;
- flex: 0 0 75%;
- max-width: 75%;
-}
-
-.col-10 {
- -ms-flex: 0 0 83.333333%;
- flex: 0 0 83.333333%;
- max-width: 83.333333%;
-}
-
-.col-11 {
- -ms-flex: 0 0 91.666667%;
- flex: 0 0 91.666667%;
- max-width: 91.666667%;
-}
-
-.col-12 {
- -ms-flex: 0 0 100%;
- flex: 0 0 100%;
- max-width: 100%;
-}
-
-.order-first {
- -ms-flex-order: -1;
- order: -1;
-}
-
-.order-last {
- -ms-flex-order: 13;
- order: 13;
-}
-
-.order-0 {
- -ms-flex-order: 0;
- order: 0;
-}
-
-.order-1 {
- -ms-flex-order: 1;
- order: 1;
-}
-
-.order-2 {
- -ms-flex-order: 2;
- order: 2;
-}
-
-.order-3 {
- -ms-flex-order: 3;
- order: 3;
-}
-
-.order-4 {
- -ms-flex-order: 4;
- order: 4;
-}
-
-.order-5 {
- -ms-flex-order: 5;
- order: 5;
-}
-
-.order-6 {
- -ms-flex-order: 6;
- order: 6;
-}
-
-.order-7 {
- -ms-flex-order: 7;
- order: 7;
-}
-
-.order-8 {
- -ms-flex-order: 8;
- order: 8;
-}
-
-.order-9 {
- -ms-flex-order: 9;
- order: 9;
-}
-
-.order-10 {
- -ms-flex-order: 10;
- order: 10;
-}
-
-.order-11 {
- -ms-flex-order: 11;
- order: 11;
-}
-
-.order-12 {
- -ms-flex-order: 12;
- order: 12;
-}
-
-.offset-1 {
- margin-left: 8.333333%;
-}
-
-.offset-2 {
- margin-left: 16.666667%;
-}
-
-.offset-3 {
- margin-left: 25%;
-}
-
-.offset-4 {
- margin-left: 33.333333%;
-}
-
-.offset-5 {
- margin-left: 41.666667%;
-}
-
-.offset-6 {
- margin-left: 50%;
-}
-
-.offset-7 {
- margin-left: 58.333333%;
-}
-
-.offset-8 {
- margin-left: 66.666667%;
-}
-
-.offset-9 {
- margin-left: 75%;
-}
-
-.offset-10 {
- margin-left: 83.333333%;
-}
-
-.offset-11 {
- margin-left: 91.666667%;
-}
-
-@media (min-width: 576px) {
- .col-sm {
- -ms-flex-preferred-size: 0;
- flex-basis: 0;
- -ms-flex-positive: 1;
- flex-grow: 1;
- min-width: 0;
- max-width: 100%;
- }
- .row-cols-sm-1 > * {
- -ms-flex: 0 0 100%;
- flex: 0 0 100%;
- max-width: 100%;
- }
- .row-cols-sm-2 > * {
- -ms-flex: 0 0 50%;
- flex: 0 0 50%;
- max-width: 50%;
- }
- .row-cols-sm-3 > * {
- -ms-flex: 0 0 33.333333%;
- flex: 0 0 33.333333%;
- max-width: 33.333333%;
- }
- .row-cols-sm-4 > * {
- -ms-flex: 0 0 25%;
- flex: 0 0 25%;
- max-width: 25%;
- }
- .row-cols-sm-5 > * {
- -ms-flex: 0 0 20%;
- flex: 0 0 20%;
- max-width: 20%;
- }
- .row-cols-sm-6 > * {
- -ms-flex: 0 0 16.666667%;
- flex: 0 0 16.666667%;
- max-width: 16.666667%;
- }
- .col-sm-auto {
- -ms-flex: 0 0 auto;
- flex: 0 0 auto;
- width: auto;
- max-width: 100%;
- }
- .col-sm-1 {
- -ms-flex: 0 0 8.333333%;
- flex: 0 0 8.333333%;
- max-width: 8.333333%;
- }
- .col-sm-2 {
- -ms-flex: 0 0 16.666667%;
- flex: 0 0 16.666667%;
- max-width: 16.666667%;
- }
- .col-sm-3 {
- -ms-flex: 0 0 25%;
- flex: 0 0 25%;
- max-width: 25%;
- }
- .col-sm-4 {
- -ms-flex: 0 0 33.333333%;
- flex: 0 0 33.333333%;
- max-width: 33.333333%;
- }
- .col-sm-5 {
- -ms-flex: 0 0 41.666667%;
- flex: 0 0 41.666667%;
- max-width: 41.666667%;
- }
- .col-sm-6 {
- -ms-flex: 0 0 50%;
- flex: 0 0 50%;
- max-width: 50%;
- }
- .col-sm-7 {
- -ms-flex: 0 0 58.333333%;
- flex: 0 0 58.333333%;
- max-width: 58.333333%;
- }
- .col-sm-8 {
- -ms-flex: 0 0 66.666667%;
- flex: 0 0 66.666667%;
- max-width: 66.666667%;
- }
- .col-sm-9 {
- -ms-flex: 0 0 75%;
- flex: 0 0 75%;
- max-width: 75%;
- }
- .col-sm-10 {
- -ms-flex: 0 0 83.333333%;
- flex: 0 0 83.333333%;
- max-width: 83.333333%;
- }
- .col-sm-11 {
- -ms-flex: 0 0 91.666667%;
- flex: 0 0 91.666667%;
- max-width: 91.666667%;
- }
- .col-sm-12 {
- -ms-flex: 0 0 100%;
- flex: 0 0 100%;
- max-width: 100%;
- }
- .order-sm-first {
- -ms-flex-order: -1;
- order: -1;
- }
- .order-sm-last {
- -ms-flex-order: 13;
- order: 13;
- }
- .order-sm-0 {
- -ms-flex-order: 0;
- order: 0;
- }
- .order-sm-1 {
- -ms-flex-order: 1;
- order: 1;
- }
- .order-sm-2 {
- -ms-flex-order: 2;
- order: 2;
- }
- .order-sm-3 {
- -ms-flex-order: 3;
- order: 3;
- }
- .order-sm-4 {
- -ms-flex-order: 4;
- order: 4;
- }
- .order-sm-5 {
- -ms-flex-order: 5;
- order: 5;
- }
- .order-sm-6 {
- -ms-flex-order: 6;
- order: 6;
- }
- .order-sm-7 {
- -ms-flex-order: 7;
- order: 7;
- }
- .order-sm-8 {
- -ms-flex-order: 8;
- order: 8;
- }
- .order-sm-9 {
- -ms-flex-order: 9;
- order: 9;
- }
- .order-sm-10 {
- -ms-flex-order: 10;
- order: 10;
- }
- .order-sm-11 {
- -ms-flex-order: 11;
- order: 11;
- }
- .order-sm-12 {
- -ms-flex-order: 12;
- order: 12;
- }
- .offset-sm-0 {
- margin-left: 0;
- }
- .offset-sm-1 {
- margin-left: 8.333333%;
- }
- .offset-sm-2 {
- margin-left: 16.666667%;
- }
- .offset-sm-3 {
- margin-left: 25%;
- }
- .offset-sm-4 {
- margin-left: 33.333333%;
- }
- .offset-sm-5 {
- margin-left: 41.666667%;
- }
- .offset-sm-6 {
- margin-left: 50%;
- }
- .offset-sm-7 {
- margin-left: 58.333333%;
- }
- .offset-sm-8 {
- margin-left: 66.666667%;
- }
- .offset-sm-9 {
- margin-left: 75%;
- }
- .offset-sm-10 {
- margin-left: 83.333333%;
- }
- .offset-sm-11 {
- margin-left: 91.666667%;
- }
-}
-
-@media (min-width: 768px) {
- .col-md {
- -ms-flex-preferred-size: 0;
- flex-basis: 0;
- -ms-flex-positive: 1;
- flex-grow: 1;
- min-width: 0;
- max-width: 100%;
- }
- .row-cols-md-1 > * {
- -ms-flex: 0 0 100%;
- flex: 0 0 100%;
- max-width: 100%;
- }
- .row-cols-md-2 > * {
- -ms-flex: 0 0 50%;
- flex: 0 0 50%;
- max-width: 50%;
- }
- .row-cols-md-3 > * {
- -ms-flex: 0 0 33.333333%;
- flex: 0 0 33.333333%;
- max-width: 33.333333%;
- }
- .row-cols-md-4 > * {
- -ms-flex: 0 0 25%;
- flex: 0 0 25%;
- max-width: 25%;
- }
- .row-cols-md-5 > * {
- -ms-flex: 0 0 20%;
- flex: 0 0 20%;
- max-width: 20%;
- }
- .row-cols-md-6 > * {
- -ms-flex: 0 0 16.666667%;
- flex: 0 0 16.666667%;
- max-width: 16.666667%;
- }
- .col-md-auto {
- -ms-flex: 0 0 auto;
- flex: 0 0 auto;
- width: auto;
- max-width: 100%;
- }
- .col-md-1 {
- -ms-flex: 0 0 8.333333%;
- flex: 0 0 8.333333%;
- max-width: 8.333333%;
- }
- .col-md-2 {
- -ms-flex: 0 0 16.666667%;
- flex: 0 0 16.666667%;
- max-width: 16.666667%;
- }
- .col-md-3 {
- -ms-flex: 0 0 25%;
- flex: 0 0 25%;
- max-width: 25%;
- }
- .col-md-4 {
- -ms-flex: 0 0 33.333333%;
- flex: 0 0 33.333333%;
- max-width: 33.333333%;
- }
- .col-md-5 {
- -ms-flex: 0 0 41.666667%;
- flex: 0 0 41.666667%;
- max-width: 41.666667%;
- }
- .col-md-6 {
- -ms-flex: 0 0 50%;
- flex: 0 0 50%;
- max-width: 50%;
- }
- .col-md-7 {
- -ms-flex: 0 0 58.333333%;
- flex: 0 0 58.333333%;
- max-width: 58.333333%;
- }
- .col-md-8 {
- -ms-flex: 0 0 66.666667%;
- flex: 0 0 66.666667%;
- max-width: 66.666667%;
- }
- .col-md-9 {
- -ms-flex: 0 0 75%;
- flex: 0 0 75%;
- max-width: 75%;
- }
- .col-md-10 {
- -ms-flex: 0 0 83.333333%;
- flex: 0 0 83.333333%;
- max-width: 83.333333%;
- }
- .col-md-11 {
- -ms-flex: 0 0 91.666667%;
- flex: 0 0 91.666667%;
- max-width: 91.666667%;
- }
- .col-md-12 {
- -ms-flex: 0 0 100%;
- flex: 0 0 100%;
- max-width: 100%;
- }
- .order-md-first {
- -ms-flex-order: -1;
- order: -1;
- }
- .order-md-last {
- -ms-flex-order: 13;
- order: 13;
- }
- .order-md-0 {
- -ms-flex-order: 0;
- order: 0;
- }
- .order-md-1 {
- -ms-flex-order: 1;
- order: 1;
- }
- .order-md-2 {
- -ms-flex-order: 2;
- order: 2;
- }
- .order-md-3 {
- -ms-flex-order: 3;
- order: 3;
- }
- .order-md-4 {
- -ms-flex-order: 4;
- order: 4;
- }
- .order-md-5 {
- -ms-flex-order: 5;
- order: 5;
- }
- .order-md-6 {
- -ms-flex-order: 6;
- order: 6;
- }
- .order-md-7 {
- -ms-flex-order: 7;
- order: 7;
- }
- .order-md-8 {
- -ms-flex-order: 8;
- order: 8;
- }
- .order-md-9 {
- -ms-flex-order: 9;
- order: 9;
- }
- .order-md-10 {
- -ms-flex-order: 10;
- order: 10;
- }
- .order-md-11 {
- -ms-flex-order: 11;
- order: 11;
- }
- .order-md-12 {
- -ms-flex-order: 12;
- order: 12;
- }
- .offset-md-0 {
- margin-left: 0;
- }
- .offset-md-1 {
- margin-left: 8.333333%;
- }
- .offset-md-2 {
- margin-left: 16.666667%;
- }
- .offset-md-3 {
- margin-left: 25%;
- }
- .offset-md-4 {
- margin-left: 33.333333%;
- }
- .offset-md-5 {
- margin-left: 41.666667%;
- }
- .offset-md-6 {
- margin-left: 50%;
- }
- .offset-md-7 {
- margin-left: 58.333333%;
- }
- .offset-md-8 {
- margin-left: 66.666667%;
- }
- .offset-md-9 {
- margin-left: 75%;
- }
- .offset-md-10 {
- margin-left: 83.333333%;
- }
- .offset-md-11 {
- margin-left: 91.666667%;
- }
-}
-
-@media (min-width: 992px) {
- .col-lg {
- -ms-flex-preferred-size: 0;
- flex-basis: 0;
- -ms-flex-positive: 1;
- flex-grow: 1;
- min-width: 0;
- max-width: 100%;
- }
- .row-cols-lg-1 > * {
- -ms-flex: 0 0 100%;
- flex: 0 0 100%;
- max-width: 100%;
- }
- .row-cols-lg-2 > * {
- -ms-flex: 0 0 50%;
- flex: 0 0 50%;
- max-width: 50%;
- }
- .row-cols-lg-3 > * {
- -ms-flex: 0 0 33.333333%;
- flex: 0 0 33.333333%;
- max-width: 33.333333%;
- }
- .row-cols-lg-4 > * {
- -ms-flex: 0 0 25%;
- flex: 0 0 25%;
- max-width: 25%;
- }
- .row-cols-lg-5 > * {
- -ms-flex: 0 0 20%;
- flex: 0 0 20%;
- max-width: 20%;
- }
- .row-cols-lg-6 > * {
- -ms-flex: 0 0 16.666667%;
- flex: 0 0 16.666667%;
- max-width: 16.666667%;
- }
- .col-lg-auto {
- -ms-flex: 0 0 auto;
- flex: 0 0 auto;
- width: auto;
- max-width: 100%;
- }
- .col-lg-1 {
- -ms-flex: 0 0 8.333333%;
- flex: 0 0 8.333333%;
- max-width: 8.333333%;
- }
- .col-lg-2 {
- -ms-flex: 0 0 16.666667%;
- flex: 0 0 16.666667%;
- max-width: 16.666667%;
- }
- .col-lg-3 {
- -ms-flex: 0 0 25%;
- flex: 0 0 25%;
- max-width: 25%;
- }
- .col-lg-4 {
- -ms-flex: 0 0 33.333333%;
- flex: 0 0 33.333333%;
- max-width: 33.333333%;
- }
- .col-lg-5 {
- -ms-flex: 0 0 41.666667%;
- flex: 0 0 41.666667%;
- max-width: 41.666667%;
- }
- .col-lg-6 {
- -ms-flex: 0 0 50%;
- flex: 0 0 50%;
- max-width: 50%;
- }
- .col-lg-7 {
- -ms-flex: 0 0 58.333333%;
- flex: 0 0 58.333333%;
- max-width: 58.333333%;
- }
- .col-lg-8 {
- -ms-flex: 0 0 66.666667%;
- flex: 0 0 66.666667%;
- max-width: 66.666667%;
- }
- .col-lg-9 {
- -ms-flex: 0 0 75%;
- flex: 0 0 75%;
- max-width: 75%;
- }
- .col-lg-10 {
- -ms-flex: 0 0 83.333333%;
- flex: 0 0 83.333333%;
- max-width: 83.333333%;
- }
- .col-lg-11 {
- -ms-flex: 0 0 91.666667%;
- flex: 0 0 91.666667%;
- max-width: 91.666667%;
- }
- .col-lg-12 {
- -ms-flex: 0 0 100%;
- flex: 0 0 100%;
- max-width: 100%;
- }
- .order-lg-first {
- -ms-flex-order: -1;
- order: -1;
- }
- .order-lg-last {
- -ms-flex-order: 13;
- order: 13;
- }
- .order-lg-0 {
- -ms-flex-order: 0;
- order: 0;
- }
- .order-lg-1 {
- -ms-flex-order: 1;
- order: 1;
- }
- .order-lg-2 {
- -ms-flex-order: 2;
- order: 2;
- }
- .order-lg-3 {
- -ms-flex-order: 3;
- order: 3;
- }
- .order-lg-4 {
- -ms-flex-order: 4;
- order: 4;
- }
- .order-lg-5 {
- -ms-flex-order: 5;
- order: 5;
- }
- .order-lg-6 {
- -ms-flex-order: 6;
- order: 6;
- }
- .order-lg-7 {
- -ms-flex-order: 7;
- order: 7;
- }
- .order-lg-8 {
- -ms-flex-order: 8;
- order: 8;
- }
- .order-lg-9 {
- -ms-flex-order: 9;
- order: 9;
- }
- .order-lg-10 {
- -ms-flex-order: 10;
- order: 10;
- }
- .order-lg-11 {
- -ms-flex-order: 11;
- order: 11;
- }
- .order-lg-12 {
- -ms-flex-order: 12;
- order: 12;
- }
- .offset-lg-0 {
- margin-left: 0;
- }
- .offset-lg-1 {
- margin-left: 8.333333%;
- }
- .offset-lg-2 {
- margin-left: 16.666667%;
- }
- .offset-lg-3 {
- margin-left: 25%;
- }
- .offset-lg-4 {
- margin-left: 33.333333%;
- }
- .offset-lg-5 {
- margin-left: 41.666667%;
- }
- .offset-lg-6 {
- margin-left: 50%;
- }
- .offset-lg-7 {
- margin-left: 58.333333%;
- }
- .offset-lg-8 {
- margin-left: 66.666667%;
- }
- .offset-lg-9 {
- margin-left: 75%;
- }
- .offset-lg-10 {
- margin-left: 83.333333%;
- }
- .offset-lg-11 {
- margin-left: 91.666667%;
- }
-}
-
-@media (min-width: 1200px) {
- .col-xl {
- -ms-flex-preferred-size: 0;
- flex-basis: 0;
- -ms-flex-positive: 1;
- flex-grow: 1;
- min-width: 0;
- max-width: 100%;
- }
- .row-cols-xl-1 > * {
- -ms-flex: 0 0 100%;
- flex: 0 0 100%;
- max-width: 100%;
- }
- .row-cols-xl-2 > * {
- -ms-flex: 0 0 50%;
- flex: 0 0 50%;
- max-width: 50%;
- }
- .row-cols-xl-3 > * {
- -ms-flex: 0 0 33.333333%;
- flex: 0 0 33.333333%;
- max-width: 33.333333%;
- }
- .row-cols-xl-4 > * {
- -ms-flex: 0 0 25%;
- flex: 0 0 25%;
- max-width: 25%;
- }
- .row-cols-xl-5 > * {
- -ms-flex: 0 0 20%;
- flex: 0 0 20%;
- max-width: 20%;
- }
- .row-cols-xl-6 > * {
- -ms-flex: 0 0 16.666667%;
- flex: 0 0 16.666667%;
- max-width: 16.666667%;
- }
- .col-xl-auto {
- -ms-flex: 0 0 auto;
- flex: 0 0 auto;
- width: auto;
- max-width: 100%;
- }
- .col-xl-1 {
- -ms-flex: 0 0 8.333333%;
- flex: 0 0 8.333333%;
- max-width: 8.333333%;
- }
- .col-xl-2 {
- -ms-flex: 0 0 16.666667%;
- flex: 0 0 16.666667%;
- max-width: 16.666667%;
- }
- .col-xl-3 {
- -ms-flex: 0 0 25%;
- flex: 0 0 25%;
- max-width: 25%;
- }
- .col-xl-4 {
- -ms-flex: 0 0 33.333333%;
- flex: 0 0 33.333333%;
- max-width: 33.333333%;
- }
- .col-xl-5 {
- -ms-flex: 0 0 41.666667%;
- flex: 0 0 41.666667%;
- max-width: 41.666667%;
- }
- .col-xl-6 {
- -ms-flex: 0 0 50%;
- flex: 0 0 50%;
- max-width: 50%;
- }
- .col-xl-7 {
- -ms-flex: 0 0 58.333333%;
- flex: 0 0 58.333333%;
- max-width: 58.333333%;
- }
- .col-xl-8 {
- -ms-flex: 0 0 66.666667%;
- flex: 0 0 66.666667%;
- max-width: 66.666667%;
- }
- .col-xl-9 {
- -ms-flex: 0 0 75%;
- flex: 0 0 75%;
- max-width: 75%;
- }
- .col-xl-10 {
- -ms-flex: 0 0 83.333333%;
- flex: 0 0 83.333333%;
- max-width: 83.333333%;
- }
- .col-xl-11 {
- -ms-flex: 0 0 91.666667%;
- flex: 0 0 91.666667%;
- max-width: 91.666667%;
- }
- .col-xl-12 {
- -ms-flex: 0 0 100%;
- flex: 0 0 100%;
- max-width: 100%;
- }
- .order-xl-first {
- -ms-flex-order: -1;
- order: -1;
- }
- .order-xl-last {
- -ms-flex-order: 13;
- order: 13;
- }
- .order-xl-0 {
- -ms-flex-order: 0;
- order: 0;
- }
- .order-xl-1 {
- -ms-flex-order: 1;
- order: 1;
- }
- .order-xl-2 {
- -ms-flex-order: 2;
- order: 2;
- }
- .order-xl-3 {
- -ms-flex-order: 3;
- order: 3;
- }
- .order-xl-4 {
- -ms-flex-order: 4;
- order: 4;
- }
- .order-xl-5 {
- -ms-flex-order: 5;
- order: 5;
- }
- .order-xl-6 {
- -ms-flex-order: 6;
- order: 6;
- }
- .order-xl-7 {
- -ms-flex-order: 7;
- order: 7;
- }
- .order-xl-8 {
- -ms-flex-order: 8;
- order: 8;
- }
- .order-xl-9 {
- -ms-flex-order: 9;
- order: 9;
- }
- .order-xl-10 {
- -ms-flex-order: 10;
- order: 10;
- }
- .order-xl-11 {
- -ms-flex-order: 11;
- order: 11;
- }
- .order-xl-12 {
- -ms-flex-order: 12;
- order: 12;
- }
- .offset-xl-0 {
- margin-left: 0;
- }
- .offset-xl-1 {
- margin-left: 8.333333%;
- }
- .offset-xl-2 {
- margin-left: 16.666667%;
- }
- .offset-xl-3 {
- margin-left: 25%;
- }
- .offset-xl-4 {
- margin-left: 33.333333%;
- }
- .offset-xl-5 {
- margin-left: 41.666667%;
- }
- .offset-xl-6 {
- margin-left: 50%;
- }
- .offset-xl-7 {
- margin-left: 58.333333%;
- }
- .offset-xl-8 {
- margin-left: 66.666667%;
- }
- .offset-xl-9 {
- margin-left: 75%;
- }
- .offset-xl-10 {
- margin-left: 83.333333%;
- }
- .offset-xl-11 {
- margin-left: 91.666667%;
- }
-}
-
-.d-none {
- display: none !important;
-}
-
-.d-inline {
- display: inline !important;
-}
-
-.d-inline-block {
- display: inline-block !important;
-}
-
-.d-block {
- display: block !important;
-}
-
-.d-table {
- display: table !important;
-}
-
-.d-table-row {
- display: table-row !important;
-}
-
-.d-table-cell {
- display: table-cell !important;
-}
-
-.d-flex {
- display: -ms-flexbox !important;
- display: flex !important;
-}
-
-.d-inline-flex {
- display: -ms-inline-flexbox !important;
- display: inline-flex !important;
-}
-
-@media (min-width: 576px) {
- .d-sm-none {
- display: none !important;
- }
- .d-sm-inline {
- display: inline !important;
- }
- .d-sm-inline-block {
- display: inline-block !important;
- }
- .d-sm-block {
- display: block !important;
- }
- .d-sm-table {
- display: table !important;
- }
- .d-sm-table-row {
- display: table-row !important;
- }
- .d-sm-table-cell {
- display: table-cell !important;
- }
- .d-sm-flex {
- display: -ms-flexbox !important;
- display: flex !important;
- }
- .d-sm-inline-flex {
- display: -ms-inline-flexbox !important;
- display: inline-flex !important;
- }
-}
-
-@media (min-width: 768px) {
- .d-md-none {
- display: none !important;
- }
- .d-md-inline {
- display: inline !important;
- }
- .d-md-inline-block {
- display: inline-block !important;
- }
- .d-md-block {
- display: block !important;
- }
- .d-md-table {
- display: table !important;
- }
- .d-md-table-row {
- display: table-row !important;
- }
- .d-md-table-cell {
- display: table-cell !important;
- }
- .d-md-flex {
- display: -ms-flexbox !important;
- display: flex !important;
- }
- .d-md-inline-flex {
- display: -ms-inline-flexbox !important;
- display: inline-flex !important;
- }
-}
-
-@media (min-width: 992px) {
- .d-lg-none {
- display: none !important;
- }
- .d-lg-inline {
- display: inline !important;
- }
- .d-lg-inline-block {
- display: inline-block !important;
- }
- .d-lg-block {
- display: block !important;
- }
- .d-lg-table {
- display: table !important;
- }
- .d-lg-table-row {
- display: table-row !important;
- }
- .d-lg-table-cell {
- display: table-cell !important;
- }
- .d-lg-flex {
- display: -ms-flexbox !important;
- display: flex !important;
- }
- .d-lg-inline-flex {
- display: -ms-inline-flexbox !important;
- display: inline-flex !important;
- }
-}
-
-@media (min-width: 1200px) {
- .d-xl-none {
- display: none !important;
- }
- .d-xl-inline {
- display: inline !important;
- }
- .d-xl-inline-block {
- display: inline-block !important;
- }
- .d-xl-block {
- display: block !important;
- }
- .d-xl-table {
- display: table !important;
- }
- .d-xl-table-row {
- display: table-row !important;
- }
- .d-xl-table-cell {
- display: table-cell !important;
- }
- .d-xl-flex {
- display: -ms-flexbox !important;
- display: flex !important;
- }
- .d-xl-inline-flex {
- display: -ms-inline-flexbox !important;
- display: inline-flex !important;
- }
-}
-
-@media print {
- .d-print-none {
- display: none !important;
- }
- .d-print-inline {
- display: inline !important;
- }
- .d-print-inline-block {
- display: inline-block !important;
- }
- .d-print-block {
- display: block !important;
- }
- .d-print-table {
- display: table !important;
- }
- .d-print-table-row {
- display: table-row !important;
- }
- .d-print-table-cell {
- display: table-cell !important;
- }
- .d-print-flex {
- display: -ms-flexbox !important;
- display: flex !important;
- }
- .d-print-inline-flex {
- display: -ms-inline-flexbox !important;
- display: inline-flex !important;
- }
-}
-
-.flex-row {
- -ms-flex-direction: row !important;
- flex-direction: row !important;
-}
-
-.flex-column {
- -ms-flex-direction: column !important;
- flex-direction: column !important;
-}
-
-.flex-row-reverse {
- -ms-flex-direction: row-reverse !important;
- flex-direction: row-reverse !important;
-}
-
-.flex-column-reverse {
- -ms-flex-direction: column-reverse !important;
- flex-direction: column-reverse !important;
-}
-
-.flex-wrap {
- -ms-flex-wrap: wrap !important;
- flex-wrap: wrap !important;
-}
-
-.flex-nowrap {
- -ms-flex-wrap: nowrap !important;
- flex-wrap: nowrap !important;
-}
-
-.flex-wrap-reverse {
- -ms-flex-wrap: wrap-reverse !important;
- flex-wrap: wrap-reverse !important;
-}
-
-.flex-fill {
- -ms-flex: 1 1 auto !important;
- flex: 1 1 auto !important;
-}
-
-.flex-grow-0 {
- -ms-flex-positive: 0 !important;
- flex-grow: 0 !important;
-}
-
-.flex-grow-1 {
- -ms-flex-positive: 1 !important;
- flex-grow: 1 !important;
-}
-
-.flex-shrink-0 {
- -ms-flex-negative: 0 !important;
- flex-shrink: 0 !important;
-}
-
-.flex-shrink-1 {
- -ms-flex-negative: 1 !important;
- flex-shrink: 1 !important;
-}
-
-.justify-content-start {
- -ms-flex-pack: start !important;
- justify-content: flex-start !important;
-}
-
-.justify-content-end {
- -ms-flex-pack: end !important;
- justify-content: flex-end !important;
-}
-
-.justify-content-center {
- -ms-flex-pack: center !important;
- justify-content: center !important;
-}
-
-.justify-content-between {
- -ms-flex-pack: justify !important;
- justify-content: space-between !important;
-}
-
-.justify-content-around {
- -ms-flex-pack: distribute !important;
- justify-content: space-around !important;
-}
-
-.align-items-start {
- -ms-flex-align: start !important;
- align-items: flex-start !important;
-}
-
-.align-items-end {
- -ms-flex-align: end !important;
- align-items: flex-end !important;
-}
-
-.align-items-center {
- -ms-flex-align: center !important;
- align-items: center !important;
-}
-
-.align-items-baseline {
- -ms-flex-align: baseline !important;
- align-items: baseline !important;
-}
-
-.align-items-stretch {
- -ms-flex-align: stretch !important;
- align-items: stretch !important;
-}
-
-.align-content-start {
- -ms-flex-line-pack: start !important;
- align-content: flex-start !important;
-}
-
-.align-content-end {
- -ms-flex-line-pack: end !important;
- align-content: flex-end !important;
-}
-
-.align-content-center {
- -ms-flex-line-pack: center !important;
- align-content: center !important;
-}
-
-.align-content-between {
- -ms-flex-line-pack: justify !important;
- align-content: space-between !important;
-}
-
-.align-content-around {
- -ms-flex-line-pack: distribute !important;
- align-content: space-around !important;
-}
-
-.align-content-stretch {
- -ms-flex-line-pack: stretch !important;
- align-content: stretch !important;
-}
-
-.align-self-auto {
- -ms-flex-item-align: auto !important;
- align-self: auto !important;
-}
-
-.align-self-start {
- -ms-flex-item-align: start !important;
- align-self: flex-start !important;
-}
-
-.align-self-end {
- -ms-flex-item-align: end !important;
- align-self: flex-end !important;
-}
-
-.align-self-center {
- -ms-flex-item-align: center !important;
- align-self: center !important;
-}
-
-.align-self-baseline {
- -ms-flex-item-align: baseline !important;
- align-self: baseline !important;
-}
-
-.align-self-stretch {
- -ms-flex-item-align: stretch !important;
- align-self: stretch !important;
-}
-
-@media (min-width: 576px) {
- .flex-sm-row {
- -ms-flex-direction: row !important;
- flex-direction: row !important;
- }
- .flex-sm-column {
- -ms-flex-direction: column !important;
- flex-direction: column !important;
- }
- .flex-sm-row-reverse {
- -ms-flex-direction: row-reverse !important;
- flex-direction: row-reverse !important;
- }
- .flex-sm-column-reverse {
- -ms-flex-direction: column-reverse !important;
- flex-direction: column-reverse !important;
- }
- .flex-sm-wrap {
- -ms-flex-wrap: wrap !important;
- flex-wrap: wrap !important;
- }
- .flex-sm-nowrap {
- -ms-flex-wrap: nowrap !important;
- flex-wrap: nowrap !important;
- }
- .flex-sm-wrap-reverse {
- -ms-flex-wrap: wrap-reverse !important;
- flex-wrap: wrap-reverse !important;
- }
- .flex-sm-fill {
- -ms-flex: 1 1 auto !important;
- flex: 1 1 auto !important;
- }
- .flex-sm-grow-0 {
- -ms-flex-positive: 0 !important;
- flex-grow: 0 !important;
- }
- .flex-sm-grow-1 {
- -ms-flex-positive: 1 !important;
- flex-grow: 1 !important;
- }
- .flex-sm-shrink-0 {
- -ms-flex-negative: 0 !important;
- flex-shrink: 0 !important;
- }
- .flex-sm-shrink-1 {
- -ms-flex-negative: 1 !important;
- flex-shrink: 1 !important;
- }
- .justify-content-sm-start {
- -ms-flex-pack: start !important;
- justify-content: flex-start !important;
- }
- .justify-content-sm-end {
- -ms-flex-pack: end !important;
- justify-content: flex-end !important;
- }
- .justify-content-sm-center {
- -ms-flex-pack: center !important;
- justify-content: center !important;
- }
- .justify-content-sm-between {
- -ms-flex-pack: justify !important;
- justify-content: space-between !important;
- }
- .justify-content-sm-around {
- -ms-flex-pack: distribute !important;
- justify-content: space-around !important;
- }
- .align-items-sm-start {
- -ms-flex-align: start !important;
- align-items: flex-start !important;
- }
- .align-items-sm-end {
- -ms-flex-align: end !important;
- align-items: flex-end !important;
- }
- .align-items-sm-center {
- -ms-flex-align: center !important;
- align-items: center !important;
- }
- .align-items-sm-baseline {
- -ms-flex-align: baseline !important;
- align-items: baseline !important;
- }
- .align-items-sm-stretch {
- -ms-flex-align: stretch !important;
- align-items: stretch !important;
- }
- .align-content-sm-start {
- -ms-flex-line-pack: start !important;
- align-content: flex-start !important;
- }
- .align-content-sm-end {
- -ms-flex-line-pack: end !important;
- align-content: flex-end !important;
- }
- .align-content-sm-center {
- -ms-flex-line-pack: center !important;
- align-content: center !important;
- }
- .align-content-sm-between {
- -ms-flex-line-pack: justify !important;
- align-content: space-between !important;
- }
- .align-content-sm-around {
- -ms-flex-line-pack: distribute !important;
- align-content: space-around !important;
- }
- .align-content-sm-stretch {
- -ms-flex-line-pack: stretch !important;
- align-content: stretch !important;
- }
- .align-self-sm-auto {
- -ms-flex-item-align: auto !important;
- align-self: auto !important;
- }
- .align-self-sm-start {
- -ms-flex-item-align: start !important;
- align-self: flex-start !important;
- }
- .align-self-sm-end {
- -ms-flex-item-align: end !important;
- align-self: flex-end !important;
- }
- .align-self-sm-center {
- -ms-flex-item-align: center !important;
- align-self: center !important;
- }
- .align-self-sm-baseline {
- -ms-flex-item-align: baseline !important;
- align-self: baseline !important;
- }
- .align-self-sm-stretch {
- -ms-flex-item-align: stretch !important;
- align-self: stretch !important;
- }
-}
-
-@media (min-width: 768px) {
- .flex-md-row {
- -ms-flex-direction: row !important;
- flex-direction: row !important;
- }
- .flex-md-column {
- -ms-flex-direction: column !important;
- flex-direction: column !important;
- }
- .flex-md-row-reverse {
- -ms-flex-direction: row-reverse !important;
- flex-direction: row-reverse !important;
- }
- .flex-md-column-reverse {
- -ms-flex-direction: column-reverse !important;
- flex-direction: column-reverse !important;
- }
- .flex-md-wrap {
- -ms-flex-wrap: wrap !important;
- flex-wrap: wrap !important;
- }
- .flex-md-nowrap {
- -ms-flex-wrap: nowrap !important;
- flex-wrap: nowrap !important;
- }
- .flex-md-wrap-reverse {
- -ms-flex-wrap: wrap-reverse !important;
- flex-wrap: wrap-reverse !important;
- }
- .flex-md-fill {
- -ms-flex: 1 1 auto !important;
- flex: 1 1 auto !important;
- }
- .flex-md-grow-0 {
- -ms-flex-positive: 0 !important;
- flex-grow: 0 !important;
- }
- .flex-md-grow-1 {
- -ms-flex-positive: 1 !important;
- flex-grow: 1 !important;
- }
- .flex-md-shrink-0 {
- -ms-flex-negative: 0 !important;
- flex-shrink: 0 !important;
- }
- .flex-md-shrink-1 {
- -ms-flex-negative: 1 !important;
- flex-shrink: 1 !important;
- }
- .justify-content-md-start {
- -ms-flex-pack: start !important;
- justify-content: flex-start !important;
- }
- .justify-content-md-end {
- -ms-flex-pack: end !important;
- justify-content: flex-end !important;
- }
- .justify-content-md-center {
- -ms-flex-pack: center !important;
- justify-content: center !important;
- }
- .justify-content-md-between {
- -ms-flex-pack: justify !important;
- justify-content: space-between !important;
- }
- .justify-content-md-around {
- -ms-flex-pack: distribute !important;
- justify-content: space-around !important;
- }
- .align-items-md-start {
- -ms-flex-align: start !important;
- align-items: flex-start !important;
- }
- .align-items-md-end {
- -ms-flex-align: end !important;
- align-items: flex-end !important;
- }
- .align-items-md-center {
- -ms-flex-align: center !important;
- align-items: center !important;
- }
- .align-items-md-baseline {
- -ms-flex-align: baseline !important;
- align-items: baseline !important;
- }
- .align-items-md-stretch {
- -ms-flex-align: stretch !important;
- align-items: stretch !important;
- }
- .align-content-md-start {
- -ms-flex-line-pack: start !important;
- align-content: flex-start !important;
- }
- .align-content-md-end {
- -ms-flex-line-pack: end !important;
- align-content: flex-end !important;
- }
- .align-content-md-center {
- -ms-flex-line-pack: center !important;
- align-content: center !important;
- }
- .align-content-md-between {
- -ms-flex-line-pack: justify !important;
- align-content: space-between !important;
- }
- .align-content-md-around {
- -ms-flex-line-pack: distribute !important;
- align-content: space-around !important;
- }
- .align-content-md-stretch {
- -ms-flex-line-pack: stretch !important;
- align-content: stretch !important;
- }
- .align-self-md-auto {
- -ms-flex-item-align: auto !important;
- align-self: auto !important;
- }
- .align-self-md-start {
- -ms-flex-item-align: start !important;
- align-self: flex-start !important;
- }
- .align-self-md-end {
- -ms-flex-item-align: end !important;
- align-self: flex-end !important;
- }
- .align-self-md-center {
- -ms-flex-item-align: center !important;
- align-self: center !important;
- }
- .align-self-md-baseline {
- -ms-flex-item-align: baseline !important;
- align-self: baseline !important;
- }
- .align-self-md-stretch {
- -ms-flex-item-align: stretch !important;
- align-self: stretch !important;
- }
-}
-
-@media (min-width: 992px) {
- .flex-lg-row {
- -ms-flex-direction: row !important;
- flex-direction: row !important;
- }
- .flex-lg-column {
- -ms-flex-direction: column !important;
- flex-direction: column !important;
- }
- .flex-lg-row-reverse {
- -ms-flex-direction: row-reverse !important;
- flex-direction: row-reverse !important;
- }
- .flex-lg-column-reverse {
- -ms-flex-direction: column-reverse !important;
- flex-direction: column-reverse !important;
- }
- .flex-lg-wrap {
- -ms-flex-wrap: wrap !important;
- flex-wrap: wrap !important;
- }
- .flex-lg-nowrap {
- -ms-flex-wrap: nowrap !important;
- flex-wrap: nowrap !important;
- }
- .flex-lg-wrap-reverse {
- -ms-flex-wrap: wrap-reverse !important;
- flex-wrap: wrap-reverse !important;
- }
- .flex-lg-fill {
- -ms-flex: 1 1 auto !important;
- flex: 1 1 auto !important;
- }
- .flex-lg-grow-0 {
- -ms-flex-positive: 0 !important;
- flex-grow: 0 !important;
- }
- .flex-lg-grow-1 {
- -ms-flex-positive: 1 !important;
- flex-grow: 1 !important;
- }
- .flex-lg-shrink-0 {
- -ms-flex-negative: 0 !important;
- flex-shrink: 0 !important;
- }
- .flex-lg-shrink-1 {
- -ms-flex-negative: 1 !important;
- flex-shrink: 1 !important;
- }
- .justify-content-lg-start {
- -ms-flex-pack: start !important;
- justify-content: flex-start !important;
- }
- .justify-content-lg-end {
- -ms-flex-pack: end !important;
- justify-content: flex-end !important;
- }
- .justify-content-lg-center {
- -ms-flex-pack: center !important;
- justify-content: center !important;
- }
- .justify-content-lg-between {
- -ms-flex-pack: justify !important;
- justify-content: space-between !important;
- }
- .justify-content-lg-around {
- -ms-flex-pack: distribute !important;
- justify-content: space-around !important;
- }
- .align-items-lg-start {
- -ms-flex-align: start !important;
- align-items: flex-start !important;
- }
- .align-items-lg-end {
- -ms-flex-align: end !important;
- align-items: flex-end !important;
- }
- .align-items-lg-center {
- -ms-flex-align: center !important;
- align-items: center !important;
- }
- .align-items-lg-baseline {
- -ms-flex-align: baseline !important;
- align-items: baseline !important;
- }
- .align-items-lg-stretch {
- -ms-flex-align: stretch !important;
- align-items: stretch !important;
- }
- .align-content-lg-start {
- -ms-flex-line-pack: start !important;
- align-content: flex-start !important;
- }
- .align-content-lg-end {
- -ms-flex-line-pack: end !important;
- align-content: flex-end !important;
- }
- .align-content-lg-center {
- -ms-flex-line-pack: center !important;
- align-content: center !important;
- }
- .align-content-lg-between {
- -ms-flex-line-pack: justify !important;
- align-content: space-between !important;
- }
- .align-content-lg-around {
- -ms-flex-line-pack: distribute !important;
- align-content: space-around !important;
- }
- .align-content-lg-stretch {
- -ms-flex-line-pack: stretch !important;
- align-content: stretch !important;
- }
- .align-self-lg-auto {
- -ms-flex-item-align: auto !important;
- align-self: auto !important;
- }
- .align-self-lg-start {
- -ms-flex-item-align: start !important;
- align-self: flex-start !important;
- }
- .align-self-lg-end {
- -ms-flex-item-align: end !important;
- align-self: flex-end !important;
- }
- .align-self-lg-center {
- -ms-flex-item-align: center !important;
- align-self: center !important;
- }
- .align-self-lg-baseline {
- -ms-flex-item-align: baseline !important;
- align-self: baseline !important;
- }
- .align-self-lg-stretch {
- -ms-flex-item-align: stretch !important;
- align-self: stretch !important;
- }
-}
-
-@media (min-width: 1200px) {
- .flex-xl-row {
- -ms-flex-direction: row !important;
- flex-direction: row !important;
- }
- .flex-xl-column {
- -ms-flex-direction: column !important;
- flex-direction: column !important;
- }
- .flex-xl-row-reverse {
- -ms-flex-direction: row-reverse !important;
- flex-direction: row-reverse !important;
- }
- .flex-xl-column-reverse {
- -ms-flex-direction: column-reverse !important;
- flex-direction: column-reverse !important;
- }
- .flex-xl-wrap {
- -ms-flex-wrap: wrap !important;
- flex-wrap: wrap !important;
- }
- .flex-xl-nowrap {
- -ms-flex-wrap: nowrap !important;
- flex-wrap: nowrap !important;
- }
- .flex-xl-wrap-reverse {
- -ms-flex-wrap: wrap-reverse !important;
- flex-wrap: wrap-reverse !important;
- }
- .flex-xl-fill {
- -ms-flex: 1 1 auto !important;
- flex: 1 1 auto !important;
- }
- .flex-xl-grow-0 {
- -ms-flex-positive: 0 !important;
- flex-grow: 0 !important;
- }
- .flex-xl-grow-1 {
- -ms-flex-positive: 1 !important;
- flex-grow: 1 !important;
- }
- .flex-xl-shrink-0 {
- -ms-flex-negative: 0 !important;
- flex-shrink: 0 !important;
- }
- .flex-xl-shrink-1 {
- -ms-flex-negative: 1 !important;
- flex-shrink: 1 !important;
- }
- .justify-content-xl-start {
- -ms-flex-pack: start !important;
- justify-content: flex-start !important;
- }
- .justify-content-xl-end {
- -ms-flex-pack: end !important;
- justify-content: flex-end !important;
- }
- .justify-content-xl-center {
- -ms-flex-pack: center !important;
- justify-content: center !important;
- }
- .justify-content-xl-between {
- -ms-flex-pack: justify !important;
- justify-content: space-between !important;
- }
- .justify-content-xl-around {
- -ms-flex-pack: distribute !important;
- justify-content: space-around !important;
- }
- .align-items-xl-start {
- -ms-flex-align: start !important;
- align-items: flex-start !important;
- }
- .align-items-xl-end {
- -ms-flex-align: end !important;
- align-items: flex-end !important;
- }
- .align-items-xl-center {
- -ms-flex-align: center !important;
- align-items: center !important;
- }
- .align-items-xl-baseline {
- -ms-flex-align: baseline !important;
- align-items: baseline !important;
- }
- .align-items-xl-stretch {
- -ms-flex-align: stretch !important;
- align-items: stretch !important;
- }
- .align-content-xl-start {
- -ms-flex-line-pack: start !important;
- align-content: flex-start !important;
- }
- .align-content-xl-end {
- -ms-flex-line-pack: end !important;
- align-content: flex-end !important;
- }
- .align-content-xl-center {
- -ms-flex-line-pack: center !important;
- align-content: center !important;
- }
- .align-content-xl-between {
- -ms-flex-line-pack: justify !important;
- align-content: space-between !important;
- }
- .align-content-xl-around {
- -ms-flex-line-pack: distribute !important;
- align-content: space-around !important;
- }
- .align-content-xl-stretch {
- -ms-flex-line-pack: stretch !important;
- align-content: stretch !important;
- }
- .align-self-xl-auto {
- -ms-flex-item-align: auto !important;
- align-self: auto !important;
- }
- .align-self-xl-start {
- -ms-flex-item-align: start !important;
- align-self: flex-start !important;
- }
- .align-self-xl-end {
- -ms-flex-item-align: end !important;
- align-self: flex-end !important;
- }
- .align-self-xl-center {
- -ms-flex-item-align: center !important;
- align-self: center !important;
- }
- .align-self-xl-baseline {
- -ms-flex-item-align: baseline !important;
- align-self: baseline !important;
- }
- .align-self-xl-stretch {
- -ms-flex-item-align: stretch !important;
- align-self: stretch !important;
- }
-}
-
-.m-0 {
- margin: 0 !important;
-}
-
-.mt-0,
-.my-0 {
- margin-top: 0 !important;
-}
-
-.mr-0,
-.mx-0 {
- margin-right: 0 !important;
-}
-
-.mb-0,
-.my-0 {
- margin-bottom: 0 !important;
-}
-
-.ml-0,
-.mx-0 {
- margin-left: 0 !important;
-}
-
-.m-1 {
- margin: 0.25rem !important;
-}
-
-.mt-1,
-.my-1 {
- margin-top: 0.25rem !important;
-}
-
-.mr-1,
-.mx-1 {
- margin-right: 0.25rem !important;
-}
-
-.mb-1,
-.my-1 {
- margin-bottom: 0.25rem !important;
-}
-
-.ml-1,
-.mx-1 {
- margin-left: 0.25rem !important;
-}
-
-.m-2 {
- margin: 0.5rem !important;
-}
-
-.mt-2,
-.my-2 {
- margin-top: 0.5rem !important;
-}
-
-.mr-2,
-.mx-2 {
- margin-right: 0.5rem !important;
-}
-
-.mb-2,
-.my-2 {
- margin-bottom: 0.5rem !important;
-}
-
-.ml-2,
-.mx-2 {
- margin-left: 0.5rem !important;
-}
-
-.m-3 {
- margin: 1rem !important;
-}
-
-.mt-3,
-.my-3 {
- margin-top: 1rem !important;
-}
-
-.mr-3,
-.mx-3 {
- margin-right: 1rem !important;
-}
-
-.mb-3,
-.my-3 {
- margin-bottom: 1rem !important;
-}
-
-.ml-3,
-.mx-3 {
- margin-left: 1rem !important;
-}
-
-.m-4 {
- margin: 1.5rem !important;
-}
-
-.mt-4,
-.my-4 {
- margin-top: 1.5rem !important;
-}
-
-.mr-4,
-.mx-4 {
- margin-right: 1.5rem !important;
-}
-
-.mb-4,
-.my-4 {
- margin-bottom: 1.5rem !important;
-}
-
-.ml-4,
-.mx-4 {
- margin-left: 1.5rem !important;
-}
-
-.m-5 {
- margin: 3rem !important;
-}
-
-.mt-5,
-.my-5 {
- margin-top: 3rem !important;
-}
-
-.mr-5,
-.mx-5 {
- margin-right: 3rem !important;
-}
-
-.mb-5,
-.my-5 {
- margin-bottom: 3rem !important;
-}
-
-.ml-5,
-.mx-5 {
- margin-left: 3rem !important;
-}
-
-.p-0 {
- padding: 0 !important;
-}
-
-.pt-0,
-.py-0 {
- padding-top: 0 !important;
-}
-
-.pr-0,
-.px-0 {
- padding-right: 0 !important;
-}
-
-.pb-0,
-.py-0 {
- padding-bottom: 0 !important;
-}
-
-.pl-0,
-.px-0 {
- padding-left: 0 !important;
-}
-
-.p-1 {
- padding: 0.25rem !important;
-}
-
-.pt-1,
-.py-1 {
- padding-top: 0.25rem !important;
-}
-
-.pr-1,
-.px-1 {
- padding-right: 0.25rem !important;
-}
-
-.pb-1,
-.py-1 {
- padding-bottom: 0.25rem !important;
-}
-
-.pl-1,
-.px-1 {
- padding-left: 0.25rem !important;
-}
-
-.p-2 {
- padding: 0.5rem !important;
-}
-
-.pt-2,
-.py-2 {
- padding-top: 0.5rem !important;
-}
-
-.pr-2,
-.px-2 {
- padding-right: 0.5rem !important;
-}
-
-.pb-2,
-.py-2 {
- padding-bottom: 0.5rem !important;
-}
-
-.pl-2,
-.px-2 {
- padding-left: 0.5rem !important;
-}
-
-.p-3 {
- padding: 1rem !important;
-}
-
-.pt-3,
-.py-3 {
- padding-top: 1rem !important;
-}
-
-.pr-3,
-.px-3 {
- padding-right: 1rem !important;
-}
-
-.pb-3,
-.py-3 {
- padding-bottom: 1rem !important;
-}
-
-.pl-3,
-.px-3 {
- padding-left: 1rem !important;
-}
-
-.p-4 {
- padding: 1.5rem !important;
-}
-
-.pt-4,
-.py-4 {
- padding-top: 1.5rem !important;
-}
-
-.pr-4,
-.px-4 {
- padding-right: 1.5rem !important;
-}
-
-.pb-4,
-.py-4 {
- padding-bottom: 1.5rem !important;
-}
-
-.pl-4,
-.px-4 {
- padding-left: 1.5rem !important;
-}
-
-.p-5 {
- padding: 3rem !important;
-}
-
-.pt-5,
-.py-5 {
- padding-top: 3rem !important;
-}
-
-.pr-5,
-.px-5 {
- padding-right: 3rem !important;
-}
-
-.pb-5,
-.py-5 {
- padding-bottom: 3rem !important;
-}
-
-.pl-5,
-.px-5 {
- padding-left: 3rem !important;
-}
-
-.m-n1 {
- margin: -0.25rem !important;
-}
-
-.mt-n1,
-.my-n1 {
- margin-top: -0.25rem !important;
-}
-
-.mr-n1,
-.mx-n1 {
- margin-right: -0.25rem !important;
-}
-
-.mb-n1,
-.my-n1 {
- margin-bottom: -0.25rem !important;
-}
-
-.ml-n1,
-.mx-n1 {
- margin-left: -0.25rem !important;
-}
-
-.m-n2 {
- margin: -0.5rem !important;
-}
-
-.mt-n2,
-.my-n2 {
- margin-top: -0.5rem !important;
-}
-
-.mr-n2,
-.mx-n2 {
- margin-right: -0.5rem !important;
-}
-
-.mb-n2,
-.my-n2 {
- margin-bottom: -0.5rem !important;
-}
-
-.ml-n2,
-.mx-n2 {
- margin-left: -0.5rem !important;
-}
-
-.m-n3 {
- margin: -1rem !important;
-}
-
-.mt-n3,
-.my-n3 {
- margin-top: -1rem !important;
-}
-
-.mr-n3,
-.mx-n3 {
- margin-right: -1rem !important;
-}
-
-.mb-n3,
-.my-n3 {
- margin-bottom: -1rem !important;
-}
-
-.ml-n3,
-.mx-n3 {
- margin-left: -1rem !important;
-}
-
-.m-n4 {
- margin: -1.5rem !important;
-}
-
-.mt-n4,
-.my-n4 {
- margin-top: -1.5rem !important;
-}
-
-.mr-n4,
-.mx-n4 {
- margin-right: -1.5rem !important;
-}
-
-.mb-n4,
-.my-n4 {
- margin-bottom: -1.5rem !important;
-}
-
-.ml-n4,
-.mx-n4 {
- margin-left: -1.5rem !important;
-}
-
-.m-n5 {
- margin: -3rem !important;
-}
-
-.mt-n5,
-.my-n5 {
- margin-top: -3rem !important;
-}
-
-.mr-n5,
-.mx-n5 {
- margin-right: -3rem !important;
-}
-
-.mb-n5,
-.my-n5 {
- margin-bottom: -3rem !important;
-}
-
-.ml-n5,
-.mx-n5 {
- margin-left: -3rem !important;
-}
-
-.m-auto {
- margin: auto !important;
-}
-
-.mt-auto,
-.my-auto {
- margin-top: auto !important;
-}
-
-.mr-auto,
-.mx-auto {
- margin-right: auto !important;
-}
-
-.mb-auto,
-.my-auto {
- margin-bottom: auto !important;
-}
-
-.ml-auto,
-.mx-auto {
- margin-left: auto !important;
-}
-
-@media (min-width: 576px) {
- .m-sm-0 {
- margin: 0 !important;
- }
- .mt-sm-0,
- .my-sm-0 {
- margin-top: 0 !important;
- }
- .mr-sm-0,
- .mx-sm-0 {
- margin-right: 0 !important;
- }
- .mb-sm-0,
- .my-sm-0 {
- margin-bottom: 0 !important;
- }
- .ml-sm-0,
- .mx-sm-0 {
- margin-left: 0 !important;
- }
- .m-sm-1 {
- margin: 0.25rem !important;
- }
- .mt-sm-1,
- .my-sm-1 {
- margin-top: 0.25rem !important;
- }
- .mr-sm-1,
- .mx-sm-1 {
- margin-right: 0.25rem !important;
- }
- .mb-sm-1,
- .my-sm-1 {
- margin-bottom: 0.25rem !important;
- }
- .ml-sm-1,
- .mx-sm-1 {
- margin-left: 0.25rem !important;
- }
- .m-sm-2 {
- margin: 0.5rem !important;
- }
- .mt-sm-2,
- .my-sm-2 {
- margin-top: 0.5rem !important;
- }
- .mr-sm-2,
- .mx-sm-2 {
- margin-right: 0.5rem !important;
- }
- .mb-sm-2,
- .my-sm-2 {
- margin-bottom: 0.5rem !important;
- }
- .ml-sm-2,
- .mx-sm-2 {
- margin-left: 0.5rem !important;
- }
- .m-sm-3 {
- margin: 1rem !important;
- }
- .mt-sm-3,
- .my-sm-3 {
- margin-top: 1rem !important;
- }
- .mr-sm-3,
- .mx-sm-3 {
- margin-right: 1rem !important;
- }
- .mb-sm-3,
- .my-sm-3 {
- margin-bottom: 1rem !important;
- }
- .ml-sm-3,
- .mx-sm-3 {
- margin-left: 1rem !important;
- }
- .m-sm-4 {
- margin: 1.5rem !important;
- }
- .mt-sm-4,
- .my-sm-4 {
- margin-top: 1.5rem !important;
- }
- .mr-sm-4,
- .mx-sm-4 {
- margin-right: 1.5rem !important;
- }
- .mb-sm-4,
- .my-sm-4 {
- margin-bottom: 1.5rem !important;
- }
- .ml-sm-4,
- .mx-sm-4 {
- margin-left: 1.5rem !important;
- }
- .m-sm-5 {
- margin: 3rem !important;
- }
- .mt-sm-5,
- .my-sm-5 {
- margin-top: 3rem !important;
- }
- .mr-sm-5,
- .mx-sm-5 {
- margin-right: 3rem !important;
- }
- .mb-sm-5,
- .my-sm-5 {
- margin-bottom: 3rem !important;
- }
- .ml-sm-5,
- .mx-sm-5 {
- margin-left: 3rem !important;
- }
- .p-sm-0 {
- padding: 0 !important;
- }
- .pt-sm-0,
- .py-sm-0 {
- padding-top: 0 !important;
- }
- .pr-sm-0,
- .px-sm-0 {
- padding-right: 0 !important;
- }
- .pb-sm-0,
- .py-sm-0 {
- padding-bottom: 0 !important;
- }
- .pl-sm-0,
- .px-sm-0 {
- padding-left: 0 !important;
- }
- .p-sm-1 {
- padding: 0.25rem !important;
- }
- .pt-sm-1,
- .py-sm-1 {
- padding-top: 0.25rem !important;
- }
- .pr-sm-1,
- .px-sm-1 {
- padding-right: 0.25rem !important;
- }
- .pb-sm-1,
- .py-sm-1 {
- padding-bottom: 0.25rem !important;
- }
- .pl-sm-1,
- .px-sm-1 {
- padding-left: 0.25rem !important;
- }
- .p-sm-2 {
- padding: 0.5rem !important;
- }
- .pt-sm-2,
- .py-sm-2 {
- padding-top: 0.5rem !important;
- }
- .pr-sm-2,
- .px-sm-2 {
- padding-right: 0.5rem !important;
- }
- .pb-sm-2,
- .py-sm-2 {
- padding-bottom: 0.5rem !important;
- }
- .pl-sm-2,
- .px-sm-2 {
- padding-left: 0.5rem !important;
- }
- .p-sm-3 {
- padding: 1rem !important;
- }
- .pt-sm-3,
- .py-sm-3 {
- padding-top: 1rem !important;
- }
- .pr-sm-3,
- .px-sm-3 {
- padding-right: 1rem !important;
- }
- .pb-sm-3,
- .py-sm-3 {
- padding-bottom: 1rem !important;
- }
- .pl-sm-3,
- .px-sm-3 {
- padding-left: 1rem !important;
- }
- .p-sm-4 {
- padding: 1.5rem !important;
- }
- .pt-sm-4,
- .py-sm-4 {
- padding-top: 1.5rem !important;
- }
- .pr-sm-4,
- .px-sm-4 {
- padding-right: 1.5rem !important;
- }
- .pb-sm-4,
- .py-sm-4 {
- padding-bottom: 1.5rem !important;
- }
- .pl-sm-4,
- .px-sm-4 {
- padding-left: 1.5rem !important;
- }
- .p-sm-5 {
- padding: 3rem !important;
- }
- .pt-sm-5,
- .py-sm-5 {
- padding-top: 3rem !important;
- }
- .pr-sm-5,
- .px-sm-5 {
- padding-right: 3rem !important;
- }
- .pb-sm-5,
- .py-sm-5 {
- padding-bottom: 3rem !important;
- }
- .pl-sm-5,
- .px-sm-5 {
- padding-left: 3rem !important;
- }
- .m-sm-n1 {
- margin: -0.25rem !important;
- }
- .mt-sm-n1,
- .my-sm-n1 {
- margin-top: -0.25rem !important;
- }
- .mr-sm-n1,
- .mx-sm-n1 {
- margin-right: -0.25rem !important;
- }
- .mb-sm-n1,
- .my-sm-n1 {
- margin-bottom: -0.25rem !important;
- }
- .ml-sm-n1,
- .mx-sm-n1 {
- margin-left: -0.25rem !important;
- }
- .m-sm-n2 {
- margin: -0.5rem !important;
- }
- .mt-sm-n2,
- .my-sm-n2 {
- margin-top: -0.5rem !important;
- }
- .mr-sm-n2,
- .mx-sm-n2 {
- margin-right: -0.5rem !important;
- }
- .mb-sm-n2,
- .my-sm-n2 {
- margin-bottom: -0.5rem !important;
- }
- .ml-sm-n2,
- .mx-sm-n2 {
- margin-left: -0.5rem !important;
- }
- .m-sm-n3 {
- margin: -1rem !important;
- }
- .mt-sm-n3,
- .my-sm-n3 {
- margin-top: -1rem !important;
- }
- .mr-sm-n3,
- .mx-sm-n3 {
- margin-right: -1rem !important;
- }
- .mb-sm-n3,
- .my-sm-n3 {
- margin-bottom: -1rem !important;
- }
- .ml-sm-n3,
- .mx-sm-n3 {
- margin-left: -1rem !important;
- }
- .m-sm-n4 {
- margin: -1.5rem !important;
- }
- .mt-sm-n4,
- .my-sm-n4 {
- margin-top: -1.5rem !important;
- }
- .mr-sm-n4,
- .mx-sm-n4 {
- margin-right: -1.5rem !important;
- }
- .mb-sm-n4,
- .my-sm-n4 {
- margin-bottom: -1.5rem !important;
- }
- .ml-sm-n4,
- .mx-sm-n4 {
- margin-left: -1.5rem !important;
- }
- .m-sm-n5 {
- margin: -3rem !important;
- }
- .mt-sm-n5,
- .my-sm-n5 {
- margin-top: -3rem !important;
- }
- .mr-sm-n5,
- .mx-sm-n5 {
- margin-right: -3rem !important;
- }
- .mb-sm-n5,
- .my-sm-n5 {
- margin-bottom: -3rem !important;
- }
- .ml-sm-n5,
- .mx-sm-n5 {
- margin-left: -3rem !important;
- }
- .m-sm-auto {
- margin: auto !important;
- }
- .mt-sm-auto,
- .my-sm-auto {
- margin-top: auto !important;
- }
- .mr-sm-auto,
- .mx-sm-auto {
- margin-right: auto !important;
- }
- .mb-sm-auto,
- .my-sm-auto {
- margin-bottom: auto !important;
- }
- .ml-sm-auto,
- .mx-sm-auto {
- margin-left: auto !important;
- }
-}
-
-@media (min-width: 768px) {
- .m-md-0 {
- margin: 0 !important;
- }
- .mt-md-0,
- .my-md-0 {
- margin-top: 0 !important;
- }
- .mr-md-0,
- .mx-md-0 {
- margin-right: 0 !important;
- }
- .mb-md-0,
- .my-md-0 {
- margin-bottom: 0 !important;
- }
- .ml-md-0,
- .mx-md-0 {
- margin-left: 0 !important;
- }
- .m-md-1 {
- margin: 0.25rem !important;
- }
- .mt-md-1,
- .my-md-1 {
- margin-top: 0.25rem !important;
- }
- .mr-md-1,
- .mx-md-1 {
- margin-right: 0.25rem !important;
- }
- .mb-md-1,
- .my-md-1 {
- margin-bottom: 0.25rem !important;
- }
- .ml-md-1,
- .mx-md-1 {
- margin-left: 0.25rem !important;
- }
- .m-md-2 {
- margin: 0.5rem !important;
- }
- .mt-md-2,
- .my-md-2 {
- margin-top: 0.5rem !important;
- }
- .mr-md-2,
- .mx-md-2 {
- margin-right: 0.5rem !important;
- }
- .mb-md-2,
- .my-md-2 {
- margin-bottom: 0.5rem !important;
- }
- .ml-md-2,
- .mx-md-2 {
- margin-left: 0.5rem !important;
- }
- .m-md-3 {
- margin: 1rem !important;
- }
- .mt-md-3,
- .my-md-3 {
- margin-top: 1rem !important;
- }
- .mr-md-3,
- .mx-md-3 {
- margin-right: 1rem !important;
- }
- .mb-md-3,
- .my-md-3 {
- margin-bottom: 1rem !important;
- }
- .ml-md-3,
- .mx-md-3 {
- margin-left: 1rem !important;
- }
- .m-md-4 {
- margin: 1.5rem !important;
- }
- .mt-md-4,
- .my-md-4 {
- margin-top: 1.5rem !important;
- }
- .mr-md-4,
- .mx-md-4 {
- margin-right: 1.5rem !important;
- }
- .mb-md-4,
- .my-md-4 {
- margin-bottom: 1.5rem !important;
- }
- .ml-md-4,
- .mx-md-4 {
- margin-left: 1.5rem !important;
- }
- .m-md-5 {
- margin: 3rem !important;
- }
- .mt-md-5,
- .my-md-5 {
- margin-top: 3rem !important;
- }
- .mr-md-5,
- .mx-md-5 {
- margin-right: 3rem !important;
- }
- .mb-md-5,
- .my-md-5 {
- margin-bottom: 3rem !important;
- }
- .ml-md-5,
- .mx-md-5 {
- margin-left: 3rem !important;
- }
- .p-md-0 {
- padding: 0 !important;
- }
- .pt-md-0,
- .py-md-0 {
- padding-top: 0 !important;
- }
- .pr-md-0,
- .px-md-0 {
- padding-right: 0 !important;
- }
- .pb-md-0,
- .py-md-0 {
- padding-bottom: 0 !important;
- }
- .pl-md-0,
- .px-md-0 {
- padding-left: 0 !important;
- }
- .p-md-1 {
- padding: 0.25rem !important;
- }
- .pt-md-1,
- .py-md-1 {
- padding-top: 0.25rem !important;
- }
- .pr-md-1,
- .px-md-1 {
- padding-right: 0.25rem !important;
- }
- .pb-md-1,
- .py-md-1 {
- padding-bottom: 0.25rem !important;
- }
- .pl-md-1,
- .px-md-1 {
- padding-left: 0.25rem !important;
- }
- .p-md-2 {
- padding: 0.5rem !important;
- }
- .pt-md-2,
- .py-md-2 {
- padding-top: 0.5rem !important;
- }
- .pr-md-2,
- .px-md-2 {
- padding-right: 0.5rem !important;
- }
- .pb-md-2,
- .py-md-2 {
- padding-bottom: 0.5rem !important;
- }
- .pl-md-2,
- .px-md-2 {
- padding-left: 0.5rem !important;
- }
- .p-md-3 {
- padding: 1rem !important;
- }
- .pt-md-3,
- .py-md-3 {
- padding-top: 1rem !important;
- }
- .pr-md-3,
- .px-md-3 {
- padding-right: 1rem !important;
- }
- .pb-md-3,
- .py-md-3 {
- padding-bottom: 1rem !important;
- }
- .pl-md-3,
- .px-md-3 {
- padding-left: 1rem !important;
- }
- .p-md-4 {
- padding: 1.5rem !important;
- }
- .pt-md-4,
- .py-md-4 {
- padding-top: 1.5rem !important;
- }
- .pr-md-4,
- .px-md-4 {
- padding-right: 1.5rem !important;
- }
- .pb-md-4,
- .py-md-4 {
- padding-bottom: 1.5rem !important;
- }
- .pl-md-4,
- .px-md-4 {
- padding-left: 1.5rem !important;
- }
- .p-md-5 {
- padding: 3rem !important;
- }
- .pt-md-5,
- .py-md-5 {
- padding-top: 3rem !important;
- }
- .pr-md-5,
- .px-md-5 {
- padding-right: 3rem !important;
- }
- .pb-md-5,
- .py-md-5 {
- padding-bottom: 3rem !important;
- }
- .pl-md-5,
- .px-md-5 {
- padding-left: 3rem !important;
- }
- .m-md-n1 {
- margin: -0.25rem !important;
- }
- .mt-md-n1,
- .my-md-n1 {
- margin-top: -0.25rem !important;
- }
- .mr-md-n1,
- .mx-md-n1 {
- margin-right: -0.25rem !important;
- }
- .mb-md-n1,
- .my-md-n1 {
- margin-bottom: -0.25rem !important;
- }
- .ml-md-n1,
- .mx-md-n1 {
- margin-left: -0.25rem !important;
- }
- .m-md-n2 {
- margin: -0.5rem !important;
- }
- .mt-md-n2,
- .my-md-n2 {
- margin-top: -0.5rem !important;
- }
- .mr-md-n2,
- .mx-md-n2 {
- margin-right: -0.5rem !important;
- }
- .mb-md-n2,
- .my-md-n2 {
- margin-bottom: -0.5rem !important;
- }
- .ml-md-n2,
- .mx-md-n2 {
- margin-left: -0.5rem !important;
- }
- .m-md-n3 {
- margin: -1rem !important;
- }
- .mt-md-n3,
- .my-md-n3 {
- margin-top: -1rem !important;
- }
- .mr-md-n3,
- .mx-md-n3 {
- margin-right: -1rem !important;
- }
- .mb-md-n3,
- .my-md-n3 {
- margin-bottom: -1rem !important;
- }
- .ml-md-n3,
- .mx-md-n3 {
- margin-left: -1rem !important;
- }
- .m-md-n4 {
- margin: -1.5rem !important;
- }
- .mt-md-n4,
- .my-md-n4 {
- margin-top: -1.5rem !important;
- }
- .mr-md-n4,
- .mx-md-n4 {
- margin-right: -1.5rem !important;
- }
- .mb-md-n4,
- .my-md-n4 {
- margin-bottom: -1.5rem !important;
- }
- .ml-md-n4,
- .mx-md-n4 {
- margin-left: -1.5rem !important;
- }
- .m-md-n5 {
- margin: -3rem !important;
- }
- .mt-md-n5,
- .my-md-n5 {
- margin-top: -3rem !important;
- }
- .mr-md-n5,
- .mx-md-n5 {
- margin-right: -3rem !important;
- }
- .mb-md-n5,
- .my-md-n5 {
- margin-bottom: -3rem !important;
- }
- .ml-md-n5,
- .mx-md-n5 {
- margin-left: -3rem !important;
- }
- .m-md-auto {
- margin: auto !important;
- }
- .mt-md-auto,
- .my-md-auto {
- margin-top: auto !important;
- }
- .mr-md-auto,
- .mx-md-auto {
- margin-right: auto !important;
- }
- .mb-md-auto,
- .my-md-auto {
- margin-bottom: auto !important;
- }
- .ml-md-auto,
- .mx-md-auto {
- margin-left: auto !important;
- }
-}
-
-@media (min-width: 992px) {
- .m-lg-0 {
- margin: 0 !important;
- }
- .mt-lg-0,
- .my-lg-0 {
- margin-top: 0 !important;
- }
- .mr-lg-0,
- .mx-lg-0 {
- margin-right: 0 !important;
- }
- .mb-lg-0,
- .my-lg-0 {
- margin-bottom: 0 !important;
- }
- .ml-lg-0,
- .mx-lg-0 {
- margin-left: 0 !important;
- }
- .m-lg-1 {
- margin: 0.25rem !important;
- }
- .mt-lg-1,
- .my-lg-1 {
- margin-top: 0.25rem !important;
- }
- .mr-lg-1,
- .mx-lg-1 {
- margin-right: 0.25rem !important;
- }
- .mb-lg-1,
- .my-lg-1 {
- margin-bottom: 0.25rem !important;
- }
- .ml-lg-1,
- .mx-lg-1 {
- margin-left: 0.25rem !important;
- }
- .m-lg-2 {
- margin: 0.5rem !important;
- }
- .mt-lg-2,
- .my-lg-2 {
- margin-top: 0.5rem !important;
- }
- .mr-lg-2,
- .mx-lg-2 {
- margin-right: 0.5rem !important;
- }
- .mb-lg-2,
- .my-lg-2 {
- margin-bottom: 0.5rem !important;
- }
- .ml-lg-2,
- .mx-lg-2 {
- margin-left: 0.5rem !important;
- }
- .m-lg-3 {
- margin: 1rem !important;
- }
- .mt-lg-3,
- .my-lg-3 {
- margin-top: 1rem !important;
- }
- .mr-lg-3,
- .mx-lg-3 {
- margin-right: 1rem !important;
- }
- .mb-lg-3,
- .my-lg-3 {
- margin-bottom: 1rem !important;
- }
- .ml-lg-3,
- .mx-lg-3 {
- margin-left: 1rem !important;
- }
- .m-lg-4 {
- margin: 1.5rem !important;
- }
- .mt-lg-4,
- .my-lg-4 {
- margin-top: 1.5rem !important;
- }
- .mr-lg-4,
- .mx-lg-4 {
- margin-right: 1.5rem !important;
- }
- .mb-lg-4,
- .my-lg-4 {
- margin-bottom: 1.5rem !important;
- }
- .ml-lg-4,
- .mx-lg-4 {
- margin-left: 1.5rem !important;
- }
- .m-lg-5 {
- margin: 3rem !important;
- }
- .mt-lg-5,
- .my-lg-5 {
- margin-top: 3rem !important;
- }
- .mr-lg-5,
- .mx-lg-5 {
- margin-right: 3rem !important;
- }
- .mb-lg-5,
- .my-lg-5 {
- margin-bottom: 3rem !important;
- }
- .ml-lg-5,
- .mx-lg-5 {
- margin-left: 3rem !important;
- }
- .p-lg-0 {
- padding: 0 !important;
- }
- .pt-lg-0,
- .py-lg-0 {
- padding-top: 0 !important;
- }
- .pr-lg-0,
- .px-lg-0 {
- padding-right: 0 !important;
- }
- .pb-lg-0,
- .py-lg-0 {
- padding-bottom: 0 !important;
- }
- .pl-lg-0,
- .px-lg-0 {
- padding-left: 0 !important;
- }
- .p-lg-1 {
- padding: 0.25rem !important;
- }
- .pt-lg-1,
- .py-lg-1 {
- padding-top: 0.25rem !important;
- }
- .pr-lg-1,
- .px-lg-1 {
- padding-right: 0.25rem !important;
- }
- .pb-lg-1,
- .py-lg-1 {
- padding-bottom: 0.25rem !important;
- }
- .pl-lg-1,
- .px-lg-1 {
- padding-left: 0.25rem !important;
- }
- .p-lg-2 {
- padding: 0.5rem !important;
- }
- .pt-lg-2,
- .py-lg-2 {
- padding-top: 0.5rem !important;
- }
- .pr-lg-2,
- .px-lg-2 {
- padding-right: 0.5rem !important;
- }
- .pb-lg-2,
- .py-lg-2 {
- padding-bottom: 0.5rem !important;
- }
- .pl-lg-2,
- .px-lg-2 {
- padding-left: 0.5rem !important;
- }
- .p-lg-3 {
- padding: 1rem !important;
- }
- .pt-lg-3,
- .py-lg-3 {
- padding-top: 1rem !important;
- }
- .pr-lg-3,
- .px-lg-3 {
- padding-right: 1rem !important;
- }
- .pb-lg-3,
- .py-lg-3 {
- padding-bottom: 1rem !important;
- }
- .pl-lg-3,
- .px-lg-3 {
- padding-left: 1rem !important;
- }
- .p-lg-4 {
- padding: 1.5rem !important;
- }
- .pt-lg-4,
- .py-lg-4 {
- padding-top: 1.5rem !important;
- }
- .pr-lg-4,
- .px-lg-4 {
- padding-right: 1.5rem !important;
- }
- .pb-lg-4,
- .py-lg-4 {
- padding-bottom: 1.5rem !important;
- }
- .pl-lg-4,
- .px-lg-4 {
- padding-left: 1.5rem !important;
- }
- .p-lg-5 {
- padding: 3rem !important;
- }
- .pt-lg-5,
- .py-lg-5 {
- padding-top: 3rem !important;
- }
- .pr-lg-5,
- .px-lg-5 {
- padding-right: 3rem !important;
- }
- .pb-lg-5,
- .py-lg-5 {
- padding-bottom: 3rem !important;
- }
- .pl-lg-5,
- .px-lg-5 {
- padding-left: 3rem !important;
- }
- .m-lg-n1 {
- margin: -0.25rem !important;
- }
- .mt-lg-n1,
- .my-lg-n1 {
- margin-top: -0.25rem !important;
- }
- .mr-lg-n1,
- .mx-lg-n1 {
- margin-right: -0.25rem !important;
- }
- .mb-lg-n1,
- .my-lg-n1 {
- margin-bottom: -0.25rem !important;
- }
- .ml-lg-n1,
- .mx-lg-n1 {
- margin-left: -0.25rem !important;
- }
- .m-lg-n2 {
- margin: -0.5rem !important;
- }
- .mt-lg-n2,
- .my-lg-n2 {
- margin-top: -0.5rem !important;
- }
- .mr-lg-n2,
- .mx-lg-n2 {
- margin-right: -0.5rem !important;
- }
- .mb-lg-n2,
- .my-lg-n2 {
- margin-bottom: -0.5rem !important;
- }
- .ml-lg-n2,
- .mx-lg-n2 {
- margin-left: -0.5rem !important;
- }
- .m-lg-n3 {
- margin: -1rem !important;
- }
- .mt-lg-n3,
- .my-lg-n3 {
- margin-top: -1rem !important;
- }
- .mr-lg-n3,
- .mx-lg-n3 {
- margin-right: -1rem !important;
- }
- .mb-lg-n3,
- .my-lg-n3 {
- margin-bottom: -1rem !important;
- }
- .ml-lg-n3,
- .mx-lg-n3 {
- margin-left: -1rem !important;
- }
- .m-lg-n4 {
- margin: -1.5rem !important;
- }
- .mt-lg-n4,
- .my-lg-n4 {
- margin-top: -1.5rem !important;
- }
- .mr-lg-n4,
- .mx-lg-n4 {
- margin-right: -1.5rem !important;
- }
- .mb-lg-n4,
- .my-lg-n4 {
- margin-bottom: -1.5rem !important;
- }
- .ml-lg-n4,
- .mx-lg-n4 {
- margin-left: -1.5rem !important;
- }
- .m-lg-n5 {
- margin: -3rem !important;
- }
- .mt-lg-n5,
- .my-lg-n5 {
- margin-top: -3rem !important;
- }
- .mr-lg-n5,
- .mx-lg-n5 {
- margin-right: -3rem !important;
- }
- .mb-lg-n5,
- .my-lg-n5 {
- margin-bottom: -3rem !important;
- }
- .ml-lg-n5,
- .mx-lg-n5 {
- margin-left: -3rem !important;
- }
- .m-lg-auto {
- margin: auto !important;
- }
- .mt-lg-auto,
- .my-lg-auto {
- margin-top: auto !important;
- }
- .mr-lg-auto,
- .mx-lg-auto {
- margin-right: auto !important;
- }
- .mb-lg-auto,
- .my-lg-auto {
- margin-bottom: auto !important;
- }
- .ml-lg-auto,
- .mx-lg-auto {
- margin-left: auto !important;
- }
-}
-
-@media (min-width: 1200px) {
- .m-xl-0 {
- margin: 0 !important;
- }
- .mt-xl-0,
- .my-xl-0 {
- margin-top: 0 !important;
- }
- .mr-xl-0,
- .mx-xl-0 {
- margin-right: 0 !important;
- }
- .mb-xl-0,
- .my-xl-0 {
- margin-bottom: 0 !important;
- }
- .ml-xl-0,
- .mx-xl-0 {
- margin-left: 0 !important;
- }
- .m-xl-1 {
- margin: 0.25rem !important;
- }
- .mt-xl-1,
- .my-xl-1 {
- margin-top: 0.25rem !important;
- }
- .mr-xl-1,
- .mx-xl-1 {
- margin-right: 0.25rem !important;
- }
- .mb-xl-1,
- .my-xl-1 {
- margin-bottom: 0.25rem !important;
- }
- .ml-xl-1,
- .mx-xl-1 {
- margin-left: 0.25rem !important;
- }
- .m-xl-2 {
- margin: 0.5rem !important;
- }
- .mt-xl-2,
- .my-xl-2 {
- margin-top: 0.5rem !important;
- }
- .mr-xl-2,
- .mx-xl-2 {
- margin-right: 0.5rem !important;
- }
- .mb-xl-2,
- .my-xl-2 {
- margin-bottom: 0.5rem !important;
- }
- .ml-xl-2,
- .mx-xl-2 {
- margin-left: 0.5rem !important;
- }
- .m-xl-3 {
- margin: 1rem !important;
- }
- .mt-xl-3,
- .my-xl-3 {
- margin-top: 1rem !important;
- }
- .mr-xl-3,
- .mx-xl-3 {
- margin-right: 1rem !important;
- }
- .mb-xl-3,
- .my-xl-3 {
- margin-bottom: 1rem !important;
- }
- .ml-xl-3,
- .mx-xl-3 {
- margin-left: 1rem !important;
- }
- .m-xl-4 {
- margin: 1.5rem !important;
- }
- .mt-xl-4,
- .my-xl-4 {
- margin-top: 1.5rem !important;
- }
- .mr-xl-4,
- .mx-xl-4 {
- margin-right: 1.5rem !important;
- }
- .mb-xl-4,
- .my-xl-4 {
- margin-bottom: 1.5rem !important;
- }
- .ml-xl-4,
- .mx-xl-4 {
- margin-left: 1.5rem !important;
- }
- .m-xl-5 {
- margin: 3rem !important;
- }
- .mt-xl-5,
- .my-xl-5 {
- margin-top: 3rem !important;
- }
- .mr-xl-5,
- .mx-xl-5 {
- margin-right: 3rem !important;
- }
- .mb-xl-5,
- .my-xl-5 {
- margin-bottom: 3rem !important;
- }
- .ml-xl-5,
- .mx-xl-5 {
- margin-left: 3rem !important;
- }
- .p-xl-0 {
- padding: 0 !important;
- }
- .pt-xl-0,
- .py-xl-0 {
- padding-top: 0 !important;
- }
- .pr-xl-0,
- .px-xl-0 {
- padding-right: 0 !important;
- }
- .pb-xl-0,
- .py-xl-0 {
- padding-bottom: 0 !important;
- }
- .pl-xl-0,
- .px-xl-0 {
- padding-left: 0 !important;
- }
- .p-xl-1 {
- padding: 0.25rem !important;
- }
- .pt-xl-1,
- .py-xl-1 {
- padding-top: 0.25rem !important;
- }
- .pr-xl-1,
- .px-xl-1 {
- padding-right: 0.25rem !important;
- }
- .pb-xl-1,
- .py-xl-1 {
- padding-bottom: 0.25rem !important;
- }
- .pl-xl-1,
- .px-xl-1 {
- padding-left: 0.25rem !important;
- }
- .p-xl-2 {
- padding: 0.5rem !important;
- }
- .pt-xl-2,
- .py-xl-2 {
- padding-top: 0.5rem !important;
- }
- .pr-xl-2,
- .px-xl-2 {
- padding-right: 0.5rem !important;
- }
- .pb-xl-2,
- .py-xl-2 {
- padding-bottom: 0.5rem !important;
- }
- .pl-xl-2,
- .px-xl-2 {
- padding-left: 0.5rem !important;
- }
- .p-xl-3 {
- padding: 1rem !important;
- }
- .pt-xl-3,
- .py-xl-3 {
- padding-top: 1rem !important;
- }
- .pr-xl-3,
- .px-xl-3 {
- padding-right: 1rem !important;
- }
- .pb-xl-3,
- .py-xl-3 {
- padding-bottom: 1rem !important;
- }
- .pl-xl-3,
- .px-xl-3 {
- padding-left: 1rem !important;
- }
- .p-xl-4 {
- padding: 1.5rem !important;
- }
- .pt-xl-4,
- .py-xl-4 {
- padding-top: 1.5rem !important;
- }
- .pr-xl-4,
- .px-xl-4 {
- padding-right: 1.5rem !important;
- }
- .pb-xl-4,
- .py-xl-4 {
- padding-bottom: 1.5rem !important;
- }
- .pl-xl-4,
- .px-xl-4 {
- padding-left: 1.5rem !important;
- }
- .p-xl-5 {
- padding: 3rem !important;
- }
- .pt-xl-5,
- .py-xl-5 {
- padding-top: 3rem !important;
- }
- .pr-xl-5,
- .px-xl-5 {
- padding-right: 3rem !important;
- }
- .pb-xl-5,
- .py-xl-5 {
- padding-bottom: 3rem !important;
- }
- .pl-xl-5,
- .px-xl-5 {
- padding-left: 3rem !important;
- }
- .m-xl-n1 {
- margin: -0.25rem !important;
- }
- .mt-xl-n1,
- .my-xl-n1 {
- margin-top: -0.25rem !important;
- }
- .mr-xl-n1,
- .mx-xl-n1 {
- margin-right: -0.25rem !important;
- }
- .mb-xl-n1,
- .my-xl-n1 {
- margin-bottom: -0.25rem !important;
- }
- .ml-xl-n1,
- .mx-xl-n1 {
- margin-left: -0.25rem !important;
- }
- .m-xl-n2 {
- margin: -0.5rem !important;
- }
- .mt-xl-n2,
- .my-xl-n2 {
- margin-top: -0.5rem !important;
- }
- .mr-xl-n2,
- .mx-xl-n2 {
- margin-right: -0.5rem !important;
- }
- .mb-xl-n2,
- .my-xl-n2 {
- margin-bottom: -0.5rem !important;
- }
- .ml-xl-n2,
- .mx-xl-n2 {
- margin-left: -0.5rem !important;
- }
- .m-xl-n3 {
- margin: -1rem !important;
- }
- .mt-xl-n3,
- .my-xl-n3 {
- margin-top: -1rem !important;
- }
- .mr-xl-n3,
- .mx-xl-n3 {
- margin-right: -1rem !important;
- }
- .mb-xl-n3,
- .my-xl-n3 {
- margin-bottom: -1rem !important;
- }
- .ml-xl-n3,
- .mx-xl-n3 {
- margin-left: -1rem !important;
- }
- .m-xl-n4 {
- margin: -1.5rem !important;
- }
- .mt-xl-n4,
- .my-xl-n4 {
- margin-top: -1.5rem !important;
- }
- .mr-xl-n4,
- .mx-xl-n4 {
- margin-right: -1.5rem !important;
- }
- .mb-xl-n4,
- .my-xl-n4 {
- margin-bottom: -1.5rem !important;
- }
- .ml-xl-n4,
- .mx-xl-n4 {
- margin-left: -1.5rem !important;
- }
- .m-xl-n5 {
- margin: -3rem !important;
- }
- .mt-xl-n5,
- .my-xl-n5 {
- margin-top: -3rem !important;
- }
- .mr-xl-n5,
- .mx-xl-n5 {
- margin-right: -3rem !important;
- }
- .mb-xl-n5,
- .my-xl-n5 {
- margin-bottom: -3rem !important;
- }
- .ml-xl-n5,
- .mx-xl-n5 {
- margin-left: -3rem !important;
- }
- .m-xl-auto {
- margin: auto !important;
- }
- .mt-xl-auto,
- .my-xl-auto {
- margin-top: auto !important;
- }
- .mr-xl-auto,
- .mx-xl-auto {
- margin-right: auto !important;
- }
- .mb-xl-auto,
- .my-xl-auto {
- margin-bottom: auto !important;
- }
- .ml-xl-auto,
- .mx-xl-auto {
- margin-left: auto !important;
- }
-}
diff --git a/styles/index.css b/styles/index.css
index b6006b43..8f27f778 100644
--- a/styles/index.css
+++ b/styles/index.css
@@ -3,6 +3,7 @@ body {
font-family: Inter, -apple-system, system-ui, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen-Sans,
Ubuntu, Cantrell, 'Helvetica Neue', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji',
'Segoe UI Symbol';
+ font-size: 16px;
font-weight: 400;
line-height: 1.8;
padding: 0;
@@ -12,14 +13,8 @@ body {
display: flex;
flex-direction: column;
flex: 1;
-
- font-size: var(--font-size-normal);
- overflow-y: overlay;
-}
-
-body {
- color: var(--gray900);
- background: var(--gray75);
+ color: var(--font-color100);
+ background: var(--background200);
}
.zh-CN {
@@ -70,28 +65,40 @@ h6 {
margin: 0;
}
-button,
-input,
-select {
- font-family: Inter, -apple-system, BlinkMacSystemFont, sans-serif;
-}
-
a,
a:active,
a:visited {
color: var(--primary400);
}
+main {
+ flex: 1;
+ display: flex;
+ flex-direction: column;
+}
+
+svg {
+ shape-rendering: geometricPrecision;
+}
+
+#__next {
+ display: flex;
+ flex-direction: column;
+ width: 100%;
+ height: 100%;
+ flex: 1;
+}
+
input[type='text'],
input[type='password'],
select,
textarea {
- color: var(--gray900);
- background: var(--gray50);
+ color: var(--base900);
+ background: var(--base50);
padding: 4px 8px;
font-size: var(--font-size-normal);
line-height: 1.8;
- border: 1px solid var(--gray500);
+ border: 1px solid var(--base500);
border-radius: 4px;
outline: none;
resize: none;
@@ -119,46 +126,3 @@ dt {
dd {
margin: 0 0 30px 0;
}
-
-main {
- flex: 1;
- display: flex;
- flex-direction: column;
-}
-
-svg {
- shape-rendering: geometricPrecision;
-}
-
-#__next {
- display: flex;
- flex-direction: column;
- width: 100%;
- height: 100%;
- flex: 1;
-}
-
-#__modals {
- z-index: 10;
-}
-
-.container {
- padding: 0;
- display: flex;
- flex-direction: column;
- flex: 1;
-}
-
-.row {
- margin-right: 0;
- margin-left: 0;
-}
-.row > .col,
-.row > [class*='col-'] {
- padding-right: 0;
- padding-left: 0;
-}
-
-.center {
- text-align: center;
-}
diff --git a/styles/variables.css b/styles/variables.css
index 4c9d7dbf..726195d2 100644
--- a/styles/variables.css
+++ b/styles/variables.css
@@ -1,55 +1,6 @@
:root {
- --gray50: #ffffff;
- --gray75: #fafafa;
- --gray100: #f5f5f5;
- --gray200: #eaeaea;
- --gray300: #e1e1e1;
- --gray400: #cacaca;
- --gray500: #b3b3b3;
- --gray600: #8e8e8e;
- --gray700: #6e6e6e;
- --gray800: #4b4b4b;
- --gray900: #2c2c2c;
-
- --primary400: #2680eb;
- --primary500: #1473e6;
- --primary600: #0d66d0;
- --primary700: #095aba;
-
- --font-size-xlarge: 36px;
- --font-size-large: 24px;
- --font-size-normal: 16px;
- --font-size-small: 14px;
- --font-size-xsmall: 12px;
-
- --grid-size-small: 576px;
- --grid-size-medium: 768px;
- --grid-size-large: 992px;
- --grid-size-xlarge: 1140px;
-
- --red400: #e34850;
- --red500: #d7373f;
- --red600: #c9252d;
- --red700: #bb121a;
-
- --green400: #2d9d78;
- --green500: #268e6c;
- --green600: #12805c;
- --green700: #107154;
-
- --msgColor: #ffffff;
-}
-
-[data-theme='dark'] {
- --gray50: #252525;
- --gray75: #2f2f2f;
- --gray100: #323232;
- --gray200: #3e3e3e;
- --gray300: #4a4a4a;
- --gray400: #5a5a5a;
- --gray500: #6e6e6e;
- --gray600: #909090;
- --gray700: #b9b9b9;
- --gray800: #e3e3e3;
- --gray900: #ffffff;
+ --primary400: var(--blue800);
+ --primary500: var(--blue900);
+ --primary600: var(--blue1000);
+ --primary700: var(--blue1100);
}
diff --git a/tracker/index.js b/tracker/index.js
index 1eb54d63..a9e11d0d 100644
--- a/tracker/index.js
+++ b/tracker/index.js
@@ -92,24 +92,24 @@
.then(text => (cache = text));
};
- const trackView = (url = currentUrl, referrer = currentRef, uuid = website) =>
+ const trackView = (url = currentUrl, referrer = currentRef, websiteId = website) =>
collect(
'pageview',
assign(getPayload(), {
- website: uuid,
+ website: websiteId,
url,
referrer,
}),
);
- const trackEvent = (event_name, event_data, url = currentUrl, uuid = website) =>
+ const trackEvent = (eventName, eventData, url = currentUrl, websiteId = website) =>
collect(
'event',
assign(getPayload(), {
- website: uuid,
+ website: websiteId,
url,
- event_name,
- event_data,
+ event_name: eventName,
+ event_data: eventData,
}),
);
@@ -143,7 +143,10 @@
) {
e.preventDefault();
trackEvent(name).then(() => {
- location.href = get('href');
+ const href = get('href');
+ if (href) {
+ location.href = href;
+ }
});
} else {
trackEvent(name);
diff --git a/tsconfig.json b/tsconfig.json
new file mode 100644
index 00000000..b022d603
--- /dev/null
+++ b/tsconfig.json
@@ -0,0 +1,28 @@
+{
+ "compilerOptions": {
+ "target": "es5",
+ "outDir": "./build",
+ "module": "esnext",
+ "moduleResolution": "node",
+ "resolveJsonModule": true,
+ "isolatedModules": true,
+ "incremental": true,
+ "lib": ["dom", "dom.iterable", "esnext"],
+ "skipLibCheck": true,
+ "esModuleInterop": true,
+ "noImplicitAny": false,
+ "preserveConstEnums": true,
+ "removeComments": true,
+ "sourceMap": true,
+ "allowSyntheticDefaultImports": true,
+ "forceConsistentCasingInFileNames": true,
+ "allowJs": true,
+ "strict": true,
+ "baseUrl": ".",
+ "strictNullChecks": false,
+ "noEmit": true,
+ "jsx": "preserve"
+ },
+ "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"],
+ "exclude": ["node_modules"]
+}
diff --git a/yarn.lock b/yarn.lock
index 91c1e9d9..288c9bd5 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -19,7 +19,7 @@
"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.16.7", "@babel/code-frame@^7.18.6":
version "7.18.6"
- resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a"
+ resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz"
integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==
dependencies:
"@babel/highlight" "^7.18.6"
@@ -31,26 +31,26 @@
dependencies:
"@babel/highlight" "^7.16.7"
-"@babel/compat-data@^7.17.7", "@babel/compat-data@^7.18.8":
- version "7.18.13"
- resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.18.13.tgz#6aff7b350a1e8c3e40b029e46cbe78e24a913483"
- integrity sha512-5yUzC5LqyTFp2HLmDoxGQelcdYgSpP9xsnMWBphAscOdFrHSAVbLNzWiy32sVNDqJRDiJK6klfDnAgu6PAGSHw==
+"@babel/compat-data@^7.17.7", "@babel/compat-data@^7.18.8", "@babel/compat-data@^7.19.4", "@babel/compat-data@^7.20.0":
+ version "7.20.0"
+ resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.20.0.tgz#9b61938c5f688212c7b9ae363a819df7d29d4093"
+ integrity sha512-Gt9jszFJYq7qzXVK4slhc6NzJXnOVmRECWcVjF/T23rNXD9NtWQ0W3qxdg+p9wWIB+VQw3GYV/U2Ha9bRTfs4w==
-"@babel/core@^7.18.5":
- version "7.18.13"
- resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.18.13.tgz#9be8c44512751b05094a4d3ab05fc53a47ce00ac"
- integrity sha512-ZisbOvRRusFktksHSG6pjj1CSvkPkcZq/KHD45LAkVP/oiHJkNBZWfpvlLmX8OtHDG8IuzsFlVRWo08w7Qxn0A==
+"@babel/core@^7.19.6":
+ version "7.19.6"
+ resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.19.6.tgz#7122ae4f5c5a37c0946c066149abd8e75f81540f"
+ integrity sha512-D2Ue4KHpc6Ys2+AxpIx1BZ8+UegLLLE2p3KJEuJRKmokHOtl49jQ5ny1773KsGLZs8MQvBidAF6yWUJxRqtKtg==
dependencies:
"@ampproject/remapping" "^2.1.0"
"@babel/code-frame" "^7.18.6"
- "@babel/generator" "^7.18.13"
- "@babel/helper-compilation-targets" "^7.18.9"
- "@babel/helper-module-transforms" "^7.18.9"
- "@babel/helpers" "^7.18.9"
- "@babel/parser" "^7.18.13"
+ "@babel/generator" "^7.19.6"
+ "@babel/helper-compilation-targets" "^7.19.3"
+ "@babel/helper-module-transforms" "^7.19.6"
+ "@babel/helpers" "^7.19.4"
+ "@babel/parser" "^7.19.6"
"@babel/template" "^7.18.10"
- "@babel/traverse" "^7.18.13"
- "@babel/types" "^7.18.13"
+ "@babel/traverse" "^7.19.6"
+ "@babel/types" "^7.19.4"
convert-source-map "^1.7.0"
debug "^4.1.0"
gensync "^1.0.0-beta.2"
@@ -78,15 +78,24 @@
json5 "^2.1.2"
semver "^6.3.0"
-"@babel/generator@^7.17.3", "@babel/generator@^7.18.13":
+"@babel/generator@^7.17.3":
version "7.18.13"
- resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.18.13.tgz#59550cbb9ae79b8def15587bdfbaa388c4abf212"
+ resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.18.13.tgz"
integrity sha512-CkPg8ySSPuHTYPJYo7IRALdqyjM9HCbt/3uOBEFbzyGVP6Mn8bwFPB0jX6982JVNBlYzM1nnPkfjuXSOPtQeEQ==
dependencies:
"@babel/types" "^7.18.13"
"@jridgewell/gen-mapping" "^0.3.2"
jsesc "^2.5.1"
+"@babel/generator@^7.18.13", "@babel/generator@^7.19.6", "@babel/generator@^7.20.0":
+ version "7.20.0"
+ resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.20.0.tgz#0bfc5379e0efb05ca6092091261fcdf7ec36249d"
+ integrity sha512-GUPcXxWibClgmYJuIwC2Bc2Lg+8b9VjaJ+HlNdACEVt+Wlr1eoU1OPZjZRm7Hzl0gaTsUZNQfeihvZJhG7oc3w==
+ dependencies:
+ "@babel/types" "^7.20.0"
+ "@jridgewell/gen-mapping" "^0.3.2"
+ jsesc "^2.5.1"
+
"@babel/helper-annotate-as-pure@^7.18.6":
version "7.18.6"
resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz#eaa49f6f80d5a33f9a5dd2276e6d6e451be0a6bb"
@@ -102,9 +111,9 @@
"@babel/helper-explode-assignable-expression" "^7.18.6"
"@babel/types" "^7.18.9"
-"@babel/helper-compilation-targets@^7.16.7", "@babel/helper-compilation-targets@^7.17.7", "@babel/helper-compilation-targets@^7.18.9":
+"@babel/helper-compilation-targets@^7.16.7":
version "7.18.9"
- resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.9.tgz#69e64f57b524cde3e5ff6cc5a9f4a387ee5563bf"
+ resolved "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.9.tgz"
integrity sha512-tzLCyVmqUiFlcFoAPLA/gL9TeYrF61VLNtb+hvkuVaB5SUjW7jcfrglBIX1vUIoT7CLP3bBlIMeyEsIl2eFQNg==
dependencies:
"@babel/compat-data" "^7.18.8"
@@ -112,31 +121,41 @@
browserslist "^4.20.2"
semver "^6.3.0"
-"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.18.9":
- version "7.18.13"
- resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.18.13.tgz#63e771187bd06d234f95fdf8bd5f8b6429de6298"
- integrity sha512-hDvXp+QYxSRL+23mpAlSGxHMDyIGChm0/AwTfTAAK5Ufe40nCsyNdaYCGuK91phn/fVu9kqayImRDkvNAgdrsA==
+"@babel/helper-compilation-targets@^7.17.7", "@babel/helper-compilation-targets@^7.18.9", "@babel/helper-compilation-targets@^7.19.0", "@babel/helper-compilation-targets@^7.19.3":
+ version "7.20.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.0.tgz#6bf5374d424e1b3922822f1d9bdaa43b1a139d0a"
+ integrity sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ==
+ dependencies:
+ "@babel/compat-data" "^7.20.0"
+ "@babel/helper-validator-option" "^7.18.6"
+ browserslist "^4.21.3"
+ semver "^6.3.0"
+
+"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.19.0":
+ version "7.19.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.19.0.tgz#bfd6904620df4e46470bae4850d66be1054c404b"
+ integrity sha512-NRz8DwF4jT3UfrmUoZjd0Uph9HQnP30t7Ash+weACcyNkiYTywpIjDBgReJMKgr+n86sn2nPVVmJ28Dm053Kqw==
dependencies:
"@babel/helper-annotate-as-pure" "^7.18.6"
"@babel/helper-environment-visitor" "^7.18.9"
- "@babel/helper-function-name" "^7.18.9"
+ "@babel/helper-function-name" "^7.19.0"
"@babel/helper-member-expression-to-functions" "^7.18.9"
"@babel/helper-optimise-call-expression" "^7.18.6"
"@babel/helper-replace-supers" "^7.18.9"
"@babel/helper-split-export-declaration" "^7.18.6"
-"@babel/helper-create-regexp-features-plugin@^7.18.6":
- version "7.18.6"
- resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.18.6.tgz#3e35f4e04acbbf25f1b3534a657610a000543d3c"
- integrity sha512-7LcpH1wnQLGrI+4v+nPp+zUvIkF9x0ddv1Hkdue10tg3gmRnLy97DXh4STiOf1qeIInyD69Qv5kKSZzKD8B/7A==
+"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.19.0":
+ version "7.19.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.19.0.tgz#7976aca61c0984202baca73d84e2337a5424a41b"
+ integrity sha512-htnV+mHX32DF81amCDrwIDr8nrp1PTm+3wfBN9/v8QJOLEioOCOG7qNyq0nHeFiWbT3Eb7gsPwEmV64UCQ1jzw==
dependencies:
"@babel/helper-annotate-as-pure" "^7.18.6"
regexpu-core "^5.1.0"
-"@babel/helper-define-polyfill-provider@^0.3.2":
- version "0.3.2"
- resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.2.tgz#bd10d0aca18e8ce012755395b05a79f45eca5073"
- integrity sha512-r9QJJ+uDWrd+94BSPcP6/de67ygLtvVy6cK4luE6MOuDsZIdoaPBnfSpbO/+LTifjPckbKXRuI9BB/Z2/y3iTg==
+"@babel/helper-define-polyfill-provider@^0.3.3":
+ version "0.3.3"
+ resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz#8612e55be5d51f0cd1f36b4a5a83924e89884b7a"
+ integrity sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==
dependencies:
"@babel/helper-compilation-targets" "^7.17.7"
"@babel/helper-plugin-utils" "^7.16.7"
@@ -157,13 +176,13 @@
dependencies:
"@babel/types" "^7.18.6"
-"@babel/helper-function-name@^7.18.9":
- version "7.18.9"
- resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.18.9.tgz#940e6084a55dee867d33b4e487da2676365e86b0"
- integrity sha512-fJgWlZt7nxGksJS9a0XdSaI4XvpExnNIgRP+rVefWh5U7BL8pPuir6SJUmFKRfjWQ51OtWSzwOxhaH/EBWWc0A==
+"@babel/helper-function-name@^7.18.9", "@babel/helper-function-name@^7.19.0":
+ version "7.19.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz#941574ed5390682e872e52d3f38ce9d1bef4648c"
+ integrity sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==
dependencies:
- "@babel/template" "^7.18.6"
- "@babel/types" "^7.18.9"
+ "@babel/template" "^7.18.10"
+ "@babel/types" "^7.19.0"
"@babel/helper-hoist-variables@^7.18.6":
version "7.18.6"
@@ -186,9 +205,9 @@
dependencies:
"@babel/types" "^7.18.6"
-"@babel/helper-module-transforms@^7.16.7", "@babel/helper-module-transforms@^7.18.6", "@babel/helper-module-transforms@^7.18.9":
+"@babel/helper-module-transforms@^7.16.7":
version "7.18.9"
- resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.18.9.tgz#5a1079c005135ed627442df31a42887e80fcb712"
+ resolved "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.9.tgz"
integrity sha512-KYNqY0ICwfv19b31XzvmI/mfcylOzbLtowkw+mfvGPAQ3kfCnMLYbED3YecL5tPd8nAYFQFAd6JHp2LxZk/J1g==
dependencies:
"@babel/helper-environment-visitor" "^7.18.9"
@@ -200,6 +219,20 @@
"@babel/traverse" "^7.18.9"
"@babel/types" "^7.18.9"
+"@babel/helper-module-transforms@^7.18.6", "@babel/helper-module-transforms@^7.19.6":
+ version "7.19.6"
+ resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.19.6.tgz#6c52cc3ac63b70952d33ee987cbee1c9368b533f"
+ integrity sha512-fCmcfQo/KYr/VXXDIyd3CBGZ6AFhPFy1TfSEJ+PilGVlQT6jcbqtHAM4C1EciRqMza7/TpOUZliuSH+U6HAhJw==
+ dependencies:
+ "@babel/helper-environment-visitor" "^7.18.9"
+ "@babel/helper-module-imports" "^7.18.6"
+ "@babel/helper-simple-access" "^7.19.4"
+ "@babel/helper-split-export-declaration" "^7.18.6"
+ "@babel/helper-validator-identifier" "^7.19.1"
+ "@babel/template" "^7.18.10"
+ "@babel/traverse" "^7.19.6"
+ "@babel/types" "^7.19.4"
+
"@babel/helper-optimise-call-expression@^7.18.6":
version "7.18.6"
resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz#9369aa943ee7da47edab2cb4e838acf09d290ffe"
@@ -207,10 +240,10 @@
dependencies:
"@babel/types" "^7.18.6"
-"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.18.9", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3":
- version "7.18.9"
- resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz#4b8aea3b069d8cb8a72cdfe28ddf5ceca695ef2f"
- integrity sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w==
+"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.18.9", "@babel/helper-plugin-utils@^7.19.0", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3":
+ version "7.19.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.19.0.tgz#4796bb14961521f0f8715990bee2fb6e51ce21bf"
+ integrity sha512-40Ryx7I8mT+0gaNxm8JGTZFUITNqdLAgdg0hXzeVZxVD6nFsdhQvip6v8dqkRHzsz1VFpFAaOCHNn0vKBL7Czw==
"@babel/helper-remap-async-to-generator@^7.18.6", "@babel/helper-remap-async-to-generator@^7.18.9":
version "7.18.9"
@@ -223,29 +256,29 @@
"@babel/types" "^7.18.9"
"@babel/helper-replace-supers@^7.18.6", "@babel/helper-replace-supers@^7.18.9":
- version "7.18.9"
- resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.18.9.tgz#1092e002feca980fbbb0bd4d51b74a65c6a500e6"
- integrity sha512-dNsWibVI4lNT6HiuOIBr1oyxo40HvIVmbwPUm3XZ7wMh4k2WxrxTqZwSqw/eEmXDS9np0ey5M2bz9tBmO9c+YQ==
+ version "7.19.1"
+ resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.19.1.tgz#e1592a9b4b368aa6bdb8784a711e0bcbf0612b78"
+ integrity sha512-T7ahH7wV0Hfs46SFh5Jz3s0B6+o8g3c+7TMxu7xKfmHikg7EAZ3I2Qk9LFhjxXq8sL7UkP5JflezNwoZa8WvWw==
dependencies:
"@babel/helper-environment-visitor" "^7.18.9"
"@babel/helper-member-expression-to-functions" "^7.18.9"
"@babel/helper-optimise-call-expression" "^7.18.6"
- "@babel/traverse" "^7.18.9"
- "@babel/types" "^7.18.9"
+ "@babel/traverse" "^7.19.1"
+ "@babel/types" "^7.19.0"
-"@babel/helper-simple-access@^7.18.6":
- version "7.18.6"
- resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz#d6d8f51f4ac2978068df934b569f08f29788c7ea"
- integrity sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==
+"@babel/helper-simple-access@^7.18.6", "@babel/helper-simple-access@^7.19.4":
+ version "7.19.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.19.4.tgz#be553f4951ac6352df2567f7daa19a0ee15668e7"
+ integrity sha512-f9Xq6WqBFqaDfbCzn2w85hwklswz5qsKlh7f08w4Y9yhJHpnNC0QemtSkK5YyOY8kPGvyiwdzZksGUhnGdaUIg==
dependencies:
- "@babel/types" "^7.18.6"
+ "@babel/types" "^7.19.4"
"@babel/helper-skip-transparent-expression-wrappers@^7.18.9":
- version "7.18.9"
- resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.18.9.tgz#778d87b3a758d90b471e7b9918f34a9a02eb5818"
- integrity sha512-imytd2gHi3cJPsybLRbmFrF7u5BIEuI2cNheyKi3/iOBC63kNn3q8Crn2xVuESli0aM4KYsyEqKyS7lFL8YVtw==
+ version "7.20.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz#fbe4c52f60518cab8140d77101f0e63a8a230684"
+ integrity sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==
dependencies:
- "@babel/types" "^7.18.9"
+ "@babel/types" "^7.20.0"
"@babel/helper-split-export-declaration@^7.18.6":
version "7.18.6"
@@ -254,40 +287,54 @@
dependencies:
"@babel/types" "^7.18.6"
-"@babel/helper-string-parser@^7.18.10":
- version "7.18.10"
- resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz#181f22d28ebe1b3857fa575f5c290b1aaf659b56"
- integrity sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw==
+"@babel/helper-string-parser@^7.18.10", "@babel/helper-string-parser@^7.19.4":
+ version "7.19.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz#38d3acb654b4701a9b77fb0615a96f775c3a9e63"
+ integrity sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==
-"@babel/helper-validator-identifier@^7.16.7", "@babel/helper-validator-identifier@^7.18.6":
+"@babel/helper-validator-identifier@^7.16.7":
version "7.18.6"
- resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz#9c97e30d31b2b8c72a1d08984f2ca9b574d7a076"
+ resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz"
integrity sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==
+"@babel/helper-validator-identifier@^7.18.6", "@babel/helper-validator-identifier@^7.19.1":
+ version "7.19.1"
+ resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2"
+ integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==
+
"@babel/helper-validator-option@^7.18.6":
version "7.18.6"
resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz#bf0d2b5a509b1f336099e4ff36e1a63aa5db4db8"
integrity sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==
"@babel/helper-wrap-function@^7.18.9":
- version "7.18.11"
- resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.18.11.tgz#bff23ace436e3f6aefb61f85ffae2291c80ed1fb"
- integrity sha512-oBUlbv+rjZLh2Ks9SKi4aL7eKaAXBWleHzU89mP0G6BMUlRxSckk9tSIkgDGydhgFxHuGSlBQZfnaD47oBEB7w==
+ version "7.19.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.19.0.tgz#89f18335cff1152373222f76a4b37799636ae8b1"
+ integrity sha512-txX8aN8CZyYGTwcLhlk87KRqncAzhh5TpQamZUa0/u3an36NtDpUP6bQgBCBcLeBs09R/OwQu3OjK0k/HwfNDg==
dependencies:
- "@babel/helper-function-name" "^7.18.9"
+ "@babel/helper-function-name" "^7.19.0"
"@babel/template" "^7.18.10"
- "@babel/traverse" "^7.18.11"
- "@babel/types" "^7.18.10"
+ "@babel/traverse" "^7.19.0"
+ "@babel/types" "^7.19.0"
-"@babel/helpers@^7.17.2", "@babel/helpers@^7.18.9":
+"@babel/helpers@^7.17.2":
version "7.18.9"
- resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.18.9.tgz#4bef3b893f253a1eced04516824ede94dcfe7ff9"
+ resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.9.tgz"
integrity sha512-Jf5a+rbrLoR4eNdUmnFu8cN5eNJT6qdTdOg5IHIzq87WwyRw9PwguLFOWYgktN/60IP4fgDUawJvs7PjQIzELQ==
dependencies:
"@babel/template" "^7.18.6"
"@babel/traverse" "^7.18.9"
"@babel/types" "^7.18.9"
+"@babel/helpers@^7.19.4":
+ version "7.20.0"
+ resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.20.0.tgz#27c8ffa8cc32a2ed3762fba48886e7654dbcf77f"
+ integrity sha512-aGMjYraN0zosCEthoGLdqot1oRsmxVTQRHadsUPz5QM44Zej2PYRz7XiDE7GqnkZnNtLbOuxqoZw42vkU7+XEQ==
+ dependencies:
+ "@babel/template" "^7.18.10"
+ "@babel/traverse" "^7.20.0"
+ "@babel/types" "^7.20.0"
+
"@babel/highlight@^7.10.4":
version "7.16.10"
resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz"
@@ -316,11 +363,16 @@
resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.18.4.tgz"
integrity sha512-FDge0dFazETFcxGw/EXzOkN8uJp0PC7Qbm+Pe9T+av2zlBpOgunFHkQPPn+eRuClU73JF+98D531UgayY89tow==
-"@babel/parser@^7.17.3", "@babel/parser@^7.18.10", "@babel/parser@^7.18.13":
+"@babel/parser@^7.17.3":
version "7.18.13"
- resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.18.13.tgz#5b2dd21cae4a2c5145f1fbd8ca103f9313d3b7e4"
+ resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.18.13.tgz"
integrity sha512-dgXcIfMuQ0kgzLB2b9tRZs7TTFFaGM2AbtA4fJgUUYukzGH4jwsS7hzQHEGs67jdehpm22vkgKwvbU+aEflgwg==
+"@babel/parser@^7.18.10", "@babel/parser@^7.18.13", "@babel/parser@^7.19.6", "@babel/parser@^7.20.0":
+ version "7.20.0"
+ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.20.0.tgz#b26133c888da4d79b0d3edcf42677bcadc783046"
+ integrity sha512-G9VgAhEaICnz8iiJeGJQyVl6J2nTjbW0xeisva0PK6XcKsga7BIaqm4ZF8Rg1Wbaqmy6znspNqhPaPkyukujzg==
+
"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.18.6":
version "7.18.6"
resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz#da5b8f9a580acdfbe53494dba45ea389fb09a4d2"
@@ -337,13 +389,13 @@
"@babel/helper-skip-transparent-expression-wrappers" "^7.18.9"
"@babel/plugin-proposal-optional-chaining" "^7.18.9"
-"@babel/plugin-proposal-async-generator-functions@^7.18.10":
- version "7.18.10"
- resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.18.10.tgz#85ea478c98b0095c3e4102bff3b67d306ed24952"
- integrity sha512-1mFuY2TOsR1hxbjCo4QL+qlIjV07p4H4EUYw2J/WCqsvFV6V9X9z9YhXbWndc/4fw+hYGlDT7egYxliMp5O6Ew==
+"@babel/plugin-proposal-async-generator-functions@^7.19.1":
+ version "7.19.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.19.1.tgz#34f6f5174b688529342288cd264f80c9ea9fb4a7"
+ integrity sha512-0yu8vNATgLy4ivqMNBIwb1HebCelqN7YX8SL3FDXORv/RqT0zEEWUCH4GH44JsSrvCu6GqnAdR5EBFAPeNBB4Q==
dependencies:
"@babel/helper-environment-visitor" "^7.18.9"
- "@babel/helper-plugin-utils" "^7.18.9"
+ "@babel/helper-plugin-utils" "^7.19.0"
"@babel/helper-remap-async-to-generator" "^7.18.9"
"@babel/plugin-syntax-async-generators" "^7.8.4"
@@ -412,14 +464,14 @@
"@babel/helper-plugin-utils" "^7.18.6"
"@babel/plugin-syntax-numeric-separator" "^7.10.4"
-"@babel/plugin-proposal-object-rest-spread@^7.18.9":
- version "7.18.9"
- resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.18.9.tgz#f9434f6beb2c8cae9dfcf97d2a5941bbbf9ad4e7"
- integrity sha512-kDDHQ5rflIeY5xl69CEqGEZ0KY369ehsCIEbTGb4siHG5BE9sga/T0r0OUwyZNLMmZE79E1kbsqAjwFCW4ds6Q==
+"@babel/plugin-proposal-object-rest-spread@^7.19.4":
+ version "7.19.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.19.4.tgz#a8fc86e8180ff57290c91a75d83fe658189b642d"
+ integrity sha512-wHmj6LDxVDnL+3WhXteUBaoM1aVILZODAUjg11kHqG4cOlfgMQGxw6aCgvrXrmaJR3Bn14oZhImyCPZzRpC93Q==
dependencies:
- "@babel/compat-data" "^7.18.8"
- "@babel/helper-compilation-targets" "^7.18.9"
- "@babel/helper-plugin-utils" "^7.18.9"
+ "@babel/compat-data" "^7.19.4"
+ "@babel/helper-compilation-targets" "^7.19.3"
+ "@babel/helper-plugin-utils" "^7.19.0"
"@babel/plugin-syntax-object-rest-spread" "^7.8.3"
"@babel/plugin-transform-parameters" "^7.18.8"
@@ -502,11 +554,11 @@
"@babel/helper-plugin-utils" "^7.8.3"
"@babel/plugin-syntax-import-assertions@^7.18.6":
- version "7.18.6"
- resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.18.6.tgz#cd6190500a4fa2fe31990a963ffab4b63e4505e4"
- integrity sha512-/DU3RXad9+bZwrgWJQKbr39gYbJpLJHezqEzRzi/BHRlJ9zsQb4CK2CA/5apllXNomwA1qHwzvHl+AdEmC5krQ==
+ version "7.20.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz#bb50e0d4bea0957235390641209394e87bdb9cc4"
+ integrity sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==
dependencies:
- "@babel/helper-plugin-utils" "^7.18.6"
+ "@babel/helper-plugin-utils" "^7.19.0"
"@babel/plugin-syntax-json-strings@^7.8.3":
version "7.8.3"
@@ -578,12 +630,12 @@
dependencies:
"@babel/helper-plugin-utils" "^7.14.5"
-"@babel/plugin-syntax-typescript@^7.18.6":
- version "7.18.6"
- resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.18.6.tgz#1c09cd25795c7c2b8a4ba9ae49394576d4133285"
- integrity sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA==
+"@babel/plugin-syntax-typescript@^7.20.0":
+ version "7.20.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.20.0.tgz#4e9a0cfc769c85689b77a2e642d24e9f697fc8c7"
+ integrity sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==
dependencies:
- "@babel/helper-plugin-utils" "^7.18.6"
+ "@babel/helper-plugin-utils" "^7.19.0"
"@babel/plugin-transform-arrow-functions@^7.18.6":
version "7.18.6"
@@ -608,23 +660,24 @@
dependencies:
"@babel/helper-plugin-utils" "^7.18.6"
-"@babel/plugin-transform-block-scoping@^7.18.9":
- version "7.18.9"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.18.9.tgz#f9b7e018ac3f373c81452d6ada8bd5a18928926d"
- integrity sha512-5sDIJRV1KtQVEbt/EIBwGy4T01uYIo4KRB3VUqzkhrAIOGx7AoctL9+Ux88btY0zXdDyPJ9mW+bg+v+XEkGmtw==
+"@babel/plugin-transform-block-scoping@^7.19.4":
+ version "7.20.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.20.0.tgz#91fe5e6ffc9ba13cb6c95ed7f0b1204f68c988c5"
+ integrity sha512-sXOohbpHZSk7GjxK9b3dKB7CfqUD5DwOH+DggKzOQ7TXYP+RCSbRykfjQmn/zq+rBjycVRtLf9pYhAaEJA786w==
dependencies:
- "@babel/helper-plugin-utils" "^7.18.9"
+ "@babel/helper-plugin-utils" "^7.19.0"
-"@babel/plugin-transform-classes@^7.18.9":
- version "7.18.9"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.18.9.tgz#90818efc5b9746879b869d5ce83eb2aa48bbc3da"
- integrity sha512-EkRQxsxoytpTlKJmSPYrsOMjCILacAjtSVkd4gChEe2kXjFCun3yohhW5I7plXJhCemM0gKsaGMcO8tinvCA5g==
+"@babel/plugin-transform-classes@^7.19.0":
+ version "7.19.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.19.0.tgz#0e61ec257fba409c41372175e7c1e606dc79bb20"
+ integrity sha512-YfeEE9kCjqTS9IitkgfJuxjcEtLUHMqa8yUJ6zdz8vR7hKuo6mOy2C05P0F1tdMmDCeuyidKnlrw/iTppHcr2A==
dependencies:
"@babel/helper-annotate-as-pure" "^7.18.6"
+ "@babel/helper-compilation-targets" "^7.19.0"
"@babel/helper-environment-visitor" "^7.18.9"
- "@babel/helper-function-name" "^7.18.9"
+ "@babel/helper-function-name" "^7.19.0"
"@babel/helper-optimise-call-expression" "^7.18.6"
- "@babel/helper-plugin-utils" "^7.18.9"
+ "@babel/helper-plugin-utils" "^7.19.0"
"@babel/helper-replace-supers" "^7.18.9"
"@babel/helper-split-export-declaration" "^7.18.6"
globals "^11.1.0"
@@ -636,12 +689,12 @@
dependencies:
"@babel/helper-plugin-utils" "^7.18.9"
-"@babel/plugin-transform-destructuring@^7.18.9":
- version "7.18.13"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.18.13.tgz#9e03bc4a94475d62b7f4114938e6c5c33372cbf5"
- integrity sha512-TodpQ29XekIsex2A+YJPj5ax2plkGa8YYY6mFjCohk/IG9IY42Rtuj1FuDeemfg2ipxIFLzPeA83SIBnlhSIow==
+"@babel/plugin-transform-destructuring@^7.19.4":
+ version "7.20.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.20.0.tgz#712829ef4825d9cc04bb379de316f981e9a6f648"
+ integrity sha512-1dIhvZfkDVx/zn2S1aFwlruspTt4189j7fEkH0Y0VyuDM6bQt7bD6kLcz3l4IlLG+e5OReaBz9ROAbttRtUHqA==
dependencies:
- "@babel/helper-plugin-utils" "^7.18.9"
+ "@babel/helper-plugin-utils" "^7.19.0"
"@babel/plugin-transform-dotall-regex@^7.18.6", "@babel/plugin-transform-dotall-regex@^7.4.4":
version "7.18.6"
@@ -697,34 +750,31 @@
"@babel/helper-plugin-utils" "^7.18.6"
"@babel/plugin-transform-modules-amd@^7.18.6":
- version "7.18.6"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.18.6.tgz#8c91f8c5115d2202f277549848874027d7172d21"
- integrity sha512-Pra5aXsmTsOnjM3IajS8rTaLCy++nGM4v3YR4esk5PCsyg9z8NA5oQLwxzMUtDBd8F+UmVza3VxoAaWCbzH1rg==
+ version "7.19.6"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.19.6.tgz#aca391801ae55d19c4d8d2ebfeaa33df5f2a2cbd"
+ integrity sha512-uG3od2mXvAtIFQIh0xrpLH6r5fpSQN04gIVovl+ODLdUMANokxQLZnPBHcjmv3GxRjnqwLuHvppjjcelqUFZvg==
dependencies:
- "@babel/helper-module-transforms" "^7.18.6"
- "@babel/helper-plugin-utils" "^7.18.6"
- babel-plugin-dynamic-import-node "^2.3.3"
+ "@babel/helper-module-transforms" "^7.19.6"
+ "@babel/helper-plugin-utils" "^7.19.0"
"@babel/plugin-transform-modules-commonjs@^7.18.6":
- version "7.18.6"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.18.6.tgz#afd243afba166cca69892e24a8fd8c9f2ca87883"
- integrity sha512-Qfv2ZOWikpvmedXQJDSbxNqy7Xr/j2Y8/KfijM0iJyKkBTmWuvCA1yeH1yDM7NJhBW/2aXxeucLj6i80/LAJ/Q==
+ version "7.19.6"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.19.6.tgz#25b32feef24df8038fc1ec56038917eacb0b730c"
+ integrity sha512-8PIa1ym4XRTKuSsOUXqDG0YaOlEuTVvHMe5JCfgBMOtHvJKw/4NGovEGN33viISshG/rZNVrACiBmPQLvWN8xQ==
dependencies:
- "@babel/helper-module-transforms" "^7.18.6"
- "@babel/helper-plugin-utils" "^7.18.6"
- "@babel/helper-simple-access" "^7.18.6"
- babel-plugin-dynamic-import-node "^2.3.3"
+ "@babel/helper-module-transforms" "^7.19.6"
+ "@babel/helper-plugin-utils" "^7.19.0"
+ "@babel/helper-simple-access" "^7.19.4"
-"@babel/plugin-transform-modules-systemjs@^7.18.9":
- version "7.18.9"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.18.9.tgz#545df284a7ac6a05125e3e405e536c5853099a06"
- integrity sha512-zY/VSIbbqtoRoJKo2cDTewL364jSlZGvn0LKOf9ntbfxOvjfmyrdtEEOAdswOswhZEb8UH3jDkCKHd1sPgsS0A==
+"@babel/plugin-transform-modules-systemjs@^7.19.0":
+ version "7.19.6"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.19.6.tgz#59e2a84064b5736a4471b1aa7b13d4431d327e0d"
+ integrity sha512-fqGLBepcc3kErfR9R3DnVpURmckXP7gj7bAlrTQyBxrigFqszZCkFkcoxzCp2v32XmwXLvbw+8Yq9/b+QqksjQ==
dependencies:
"@babel/helper-hoist-variables" "^7.18.6"
- "@babel/helper-module-transforms" "^7.18.9"
- "@babel/helper-plugin-utils" "^7.18.9"
- "@babel/helper-validator-identifier" "^7.18.6"
- babel-plugin-dynamic-import-node "^2.3.3"
+ "@babel/helper-module-transforms" "^7.19.6"
+ "@babel/helper-plugin-utils" "^7.19.0"
+ "@babel/helper-validator-identifier" "^7.19.1"
"@babel/plugin-transform-modules-umd@^7.18.6":
version "7.18.6"
@@ -734,13 +784,13 @@
"@babel/helper-module-transforms" "^7.18.6"
"@babel/helper-plugin-utils" "^7.18.6"
-"@babel/plugin-transform-named-capturing-groups-regex@^7.18.6":
- version "7.18.6"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.18.6.tgz#c89bfbc7cc6805d692f3a49bc5fc1b630007246d"
- integrity sha512-UmEOGF8XgaIqD74bC8g7iV3RYj8lMf0Bw7NJzvnS9qQhM4mg+1WHKotUIdjxgD2RGrgFLZZPCFPFj3P/kVDYhg==
+"@babel/plugin-transform-named-capturing-groups-regex@^7.19.1":
+ version "7.19.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.19.1.tgz#ec7455bab6cd8fb05c525a94876f435a48128888"
+ integrity sha512-oWk9l9WItWBQYS4FgXD4Uyy5kq898lvkXpXQxoJEY1RnvPk4R/Dvu2ebXU9q8lP+rlMwUQTFf2Ok6d78ODa0kw==
dependencies:
- "@babel/helper-create-regexp-features-plugin" "^7.18.6"
- "@babel/helper-plugin-utils" "^7.18.6"
+ "@babel/helper-create-regexp-features-plugin" "^7.19.0"
+ "@babel/helper-plugin-utils" "^7.19.0"
"@babel/plugin-transform-new-target@^7.18.6":
version "7.18.6"
@@ -771,7 +821,7 @@
dependencies:
"@babel/helper-plugin-utils" "^7.18.6"
-"@babel/plugin-transform-react-constant-elements@^7.17.12":
+"@babel/plugin-transform-react-constant-elements@^7.18.12":
version "7.18.12"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.18.12.tgz#edf3bec47eb98f14e84fa0af137fcc6aad8e0443"
integrity sha512-Q99U9/ttiu+LMnRU8psd23HhvwXmKWDQIpocm0JKaICcZHnw+mdQbHm6xnSy7dOl8I5PELakYtNBubNQlBXbZw==
@@ -793,15 +843,15 @@
"@babel/plugin-transform-react-jsx" "^7.18.6"
"@babel/plugin-transform-react-jsx@^7.18.6":
- version "7.18.10"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.18.10.tgz#ea47b2c4197102c196cbd10db9b3bb20daa820f1"
- integrity sha512-gCy7Iikrpu3IZjYZolFE4M1Sm+nrh1/6za2Ewj77Z+XirT4TsbJcvOFOyF+fRPwU6AKKK136CZxx6L8AbSFG6A==
+ version "7.19.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.19.0.tgz#b3cbb7c3a00b92ec8ae1027910e331ba5c500eb9"
+ integrity sha512-UVEvX3tXie3Szm3emi1+G63jyw1w5IcMY0FSKM+CRnKRI5Mr1YbCNgsSTwoTwKphQEG9P+QqmuRFneJPZuHNhg==
dependencies:
"@babel/helper-annotate-as-pure" "^7.18.6"
"@babel/helper-module-imports" "^7.18.6"
- "@babel/helper-plugin-utils" "^7.18.9"
+ "@babel/helper-plugin-utils" "^7.19.0"
"@babel/plugin-syntax-jsx" "^7.18.6"
- "@babel/types" "^7.18.10"
+ "@babel/types" "^7.19.0"
"@babel/plugin-transform-react-pure-annotations@^7.18.6":
version "7.18.6"
@@ -833,12 +883,12 @@
dependencies:
"@babel/helper-plugin-utils" "^7.18.6"
-"@babel/plugin-transform-spread@^7.18.9":
- version "7.18.9"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.18.9.tgz#6ea7a6297740f381c540ac56caf75b05b74fb664"
- integrity sha512-39Q814wyoOPtIB/qGopNIL9xDChOE1pNU0ZY5dO0owhiVt/5kFm4li+/bBtwc7QotG0u5EPzqhZdjMtmqBqyQA==
+"@babel/plugin-transform-spread@^7.19.0":
+ version "7.19.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.19.0.tgz#dd60b4620c2fec806d60cfaae364ec2188d593b6"
+ integrity sha512-RsuMk7j6n+r752EtzyScnWkQyuJdli6LdO5Klv8Yx0OfPVTcQkIUfS8clx5e9yHXzlnhOZF3CbQ8C2uP5j074w==
dependencies:
- "@babel/helper-plugin-utils" "^7.18.9"
+ "@babel/helper-plugin-utils" "^7.19.0"
"@babel/helper-skip-transparent-expression-wrappers" "^7.18.9"
"@babel/plugin-transform-sticky-regex@^7.18.6":
@@ -863,13 +913,13 @@
"@babel/helper-plugin-utils" "^7.18.9"
"@babel/plugin-transform-typescript@^7.18.6":
- version "7.18.12"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.18.12.tgz#712e9a71b9e00fde9f8c0238e0cceee86ab2f8fd"
- integrity sha512-2vjjam0cum0miPkenUbQswKowuxs/NjMwIKEq0zwegRxXk12C9YOF9STXnaUptITOtOJHKHpzvvWYOjbm6tc0w==
+ version "7.20.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.20.0.tgz#2c7ec62b8bfc21482f3748789ba294a46a375169"
+ integrity sha512-xOAsAFaun3t9hCwZ13Qe7gq423UgMZ6zAgmLxeGGapFqlT/X3L5qT2btjiVLlFn7gWtMaVyceS5VxGAuKbgizw==
dependencies:
- "@babel/helper-create-class-features-plugin" "^7.18.9"
- "@babel/helper-plugin-utils" "^7.18.9"
- "@babel/plugin-syntax-typescript" "^7.18.6"
+ "@babel/helper-create-class-features-plugin" "^7.19.0"
+ "@babel/helper-plugin-utils" "^7.19.0"
+ "@babel/plugin-syntax-typescript" "^7.20.0"
"@babel/plugin-transform-unicode-escapes@^7.18.10":
version "7.18.10"
@@ -886,18 +936,18 @@
"@babel/helper-create-regexp-features-plugin" "^7.18.6"
"@babel/helper-plugin-utils" "^7.18.6"
-"@babel/preset-env@^7.18.2":
- version "7.18.10"
- resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.18.10.tgz#83b8dfe70d7eea1aae5a10635ab0a5fe60dfc0f4"
- integrity sha512-wVxs1yjFdW3Z/XkNfXKoblxoHgbtUF7/l3PvvP4m02Qz9TZ6uZGxRVYjSQeR87oQmHco9zWitW5J82DJ7sCjvA==
+"@babel/preset-env@^7.19.4":
+ version "7.19.4"
+ resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.19.4.tgz#4c91ce2e1f994f717efb4237891c3ad2d808c94b"
+ integrity sha512-5QVOTXUdqTCjQuh2GGtdd7YEhoRXBMVGROAtsBeLGIbIz3obCBIfRMT1I3ZKkMgNzwkyCkftDXSSkHxnfVf4qg==
dependencies:
- "@babel/compat-data" "^7.18.8"
- "@babel/helper-compilation-targets" "^7.18.9"
- "@babel/helper-plugin-utils" "^7.18.9"
+ "@babel/compat-data" "^7.19.4"
+ "@babel/helper-compilation-targets" "^7.19.3"
+ "@babel/helper-plugin-utils" "^7.19.0"
"@babel/helper-validator-option" "^7.18.6"
"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.18.6"
"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.18.9"
- "@babel/plugin-proposal-async-generator-functions" "^7.18.10"
+ "@babel/plugin-proposal-async-generator-functions" "^7.19.1"
"@babel/plugin-proposal-class-properties" "^7.18.6"
"@babel/plugin-proposal-class-static-block" "^7.18.6"
"@babel/plugin-proposal-dynamic-import" "^7.18.6"
@@ -906,7 +956,7 @@
"@babel/plugin-proposal-logical-assignment-operators" "^7.18.9"
"@babel/plugin-proposal-nullish-coalescing-operator" "^7.18.6"
"@babel/plugin-proposal-numeric-separator" "^7.18.6"
- "@babel/plugin-proposal-object-rest-spread" "^7.18.9"
+ "@babel/plugin-proposal-object-rest-spread" "^7.19.4"
"@babel/plugin-proposal-optional-catch-binding" "^7.18.6"
"@babel/plugin-proposal-optional-chaining" "^7.18.9"
"@babel/plugin-proposal-private-methods" "^7.18.6"
@@ -930,10 +980,10 @@
"@babel/plugin-transform-arrow-functions" "^7.18.6"
"@babel/plugin-transform-async-to-generator" "^7.18.6"
"@babel/plugin-transform-block-scoped-functions" "^7.18.6"
- "@babel/plugin-transform-block-scoping" "^7.18.9"
- "@babel/plugin-transform-classes" "^7.18.9"
+ "@babel/plugin-transform-block-scoping" "^7.19.4"
+ "@babel/plugin-transform-classes" "^7.19.0"
"@babel/plugin-transform-computed-properties" "^7.18.9"
- "@babel/plugin-transform-destructuring" "^7.18.9"
+ "@babel/plugin-transform-destructuring" "^7.19.4"
"@babel/plugin-transform-dotall-regex" "^7.18.6"
"@babel/plugin-transform-duplicate-keys" "^7.18.9"
"@babel/plugin-transform-exponentiation-operator" "^7.18.6"
@@ -943,9 +993,9 @@
"@babel/plugin-transform-member-expression-literals" "^7.18.6"
"@babel/plugin-transform-modules-amd" "^7.18.6"
"@babel/plugin-transform-modules-commonjs" "^7.18.6"
- "@babel/plugin-transform-modules-systemjs" "^7.18.9"
+ "@babel/plugin-transform-modules-systemjs" "^7.19.0"
"@babel/plugin-transform-modules-umd" "^7.18.6"
- "@babel/plugin-transform-named-capturing-groups-regex" "^7.18.6"
+ "@babel/plugin-transform-named-capturing-groups-regex" "^7.19.1"
"@babel/plugin-transform-new-target" "^7.18.6"
"@babel/plugin-transform-object-super" "^7.18.6"
"@babel/plugin-transform-parameters" "^7.18.8"
@@ -953,18 +1003,18 @@
"@babel/plugin-transform-regenerator" "^7.18.6"
"@babel/plugin-transform-reserved-words" "^7.18.6"
"@babel/plugin-transform-shorthand-properties" "^7.18.6"
- "@babel/plugin-transform-spread" "^7.18.9"
+ "@babel/plugin-transform-spread" "^7.19.0"
"@babel/plugin-transform-sticky-regex" "^7.18.6"
"@babel/plugin-transform-template-literals" "^7.18.9"
"@babel/plugin-transform-typeof-symbol" "^7.18.9"
"@babel/plugin-transform-unicode-escapes" "^7.18.10"
"@babel/plugin-transform-unicode-regex" "^7.18.6"
"@babel/preset-modules" "^0.1.5"
- "@babel/types" "^7.18.10"
- babel-plugin-polyfill-corejs2 "^0.3.2"
- babel-plugin-polyfill-corejs3 "^0.5.3"
- babel-plugin-polyfill-regenerator "^0.4.0"
- core-js-compat "^3.22.1"
+ "@babel/types" "^7.19.4"
+ babel-plugin-polyfill-corejs2 "^0.3.3"
+ babel-plugin-polyfill-corejs3 "^0.6.0"
+ babel-plugin-polyfill-regenerator "^0.4.1"
+ core-js-compat "^3.25.1"
semver "^6.3.0"
"@babel/preset-modules@^0.1.5":
@@ -978,7 +1028,7 @@
"@babel/types" "^7.4.4"
esutils "^2.0.2"
-"@babel/preset-react@^7.17.12":
+"@babel/preset-react@^7.18.6":
version "7.18.6"
resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.18.6.tgz#979f76d6277048dc19094c217b507f3ad517dd2d"
integrity sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg==
@@ -990,7 +1040,7 @@
"@babel/plugin-transform-react-jsx-development" "^7.18.6"
"@babel/plugin-transform-react-pure-annotations" "^7.18.6"
-"@babel/preset-typescript@^7.17.12":
+"@babel/preset-typescript@^7.18.6":
version "7.18.6"
resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.18.6.tgz#ce64be3e63eddc44240c6358daefac17b3186399"
integrity sha512-s9ik86kXBAnD760aybBucdpnLsAt0jK1xqJn2juOn9lkOvSHV60os5hxoVJsPzMQxvnUJFAlkont2DvvaYEBtQ==
@@ -1000,32 +1050,46 @@
"@babel/plugin-transform-typescript" "^7.18.6"
"@babel/runtime-corejs3@^7.10.2":
- version "7.18.9"
- resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.18.9.tgz#7bacecd1cb2dd694eacd32a91fcf7021c20770ae"
- integrity sha512-qZEWeccZCrHA2Au4/X05QW5CMdm4VjUDCrGq5gf1ZDcM4hRqreKrtwAn7yci9zfgAS9apvnsFXiGBHBAxZdK9A==
+ version "7.20.6"
+ resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.20.6.tgz#63dae945963539ab0ad578efbf3eff271e7067ae"
+ integrity sha512-tqeujPiuEfcH067mx+7otTQWROVMKHXEaOQcAeNV5dDdbPWvPcFA8/W9LXw2NfjNmOetqLl03dfnG2WALPlsRQ==
dependencies:
- core-js-pure "^3.20.2"
- regenerator-runtime "^0.13.4"
+ core-js-pure "^3.25.1"
+ regenerator-runtime "^0.13.11"
-"@babel/runtime@^7.0.0", "@babel/runtime@^7.10.2", "@babel/runtime@^7.15.4", "@babel/runtime@^7.18.9", "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.2":
- version "7.18.9"
- resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.9.tgz"
- integrity sha512-lkqXDcvlFT5rvEjiu6+QYO+1GXrEHRo2LOtS7E4GtX5ESIZOgepqsZBVIj6Pv+a6zqsya9VCgiK1KAK4BvJDAw==
+"@babel/runtime@^7.0.0", "@babel/runtime@^7.15.4", "@babel/runtime@^7.9.2":
+ version "7.20.1"
+ resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.20.1.tgz#1148bb33ab252b165a06698fde7576092a78b4a9"
+ integrity sha512-mrzLkl6U9YLF8qpqI7TB82PESyEGjm/0Ly91jG575eVxMMlb8fYfOXFZIJ8XfLrJZQbm7dlKry2bJmXBUEkdFg==
dependencies:
- regenerator-runtime "^0.13.4"
+ regenerator-runtime "^0.13.10"
+
+"@babel/runtime@^7.10.2", "@babel/runtime@^7.18.9":
+ version "7.20.6"
+ resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.20.6.tgz#facf4879bfed9b5326326273a64220f099b0fce3"
+ integrity sha512-Q+8MqP7TiHMWzSfwiJwXCjyf4GYA4Dgw3emg/7xmwsdLJOZUp+nMqcOwOzzYheuM1rhDu8FSj2l0aoMygEuXuA==
+ dependencies:
+ regenerator-runtime "^0.13.11"
+
+"@babel/runtime@^7.8.4":
+ version "7.20.0"
+ resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.20.0.tgz#824a9ef325ffde6f78056059db3168c08785e24a"
+ integrity sha512-NDYdls71fTXoU8TZHfbBWg7DiZfNzClcKui/+kyi6ppD2L1qnWW3VV6CjtaBXSUGGhiTWJ6ereOIkUvenif66Q==
+ dependencies:
+ regenerator-runtime "^0.13.10"
"@babel/template@^7.16.7", "@babel/template@^7.18.10", "@babel/template@^7.18.6":
version "7.18.10"
- resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.18.10.tgz#6f9134835970d1dbf0835c0d100c9f38de0c5e71"
+ resolved "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz"
integrity sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==
dependencies:
"@babel/code-frame" "^7.18.6"
"@babel/parser" "^7.18.10"
"@babel/types" "^7.18.10"
-"@babel/traverse@^7.17.3", "@babel/traverse@^7.18.11", "@babel/traverse@^7.18.13", "@babel/traverse@^7.18.9":
+"@babel/traverse@^7.17.3":
version "7.18.13"
- resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.18.13.tgz#5ab59ef51a997b3f10c4587d648b9696b6cb1a68"
+ resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.13.tgz"
integrity sha512-N6kt9X1jRMLPxxxPYWi7tgvJRH/rtoU+dbKAPDM44RFHiMH8igdsaSBgFeskhSl/kLWLDUvIh1RXCrTmg0/zvA==
dependencies:
"@babel/code-frame" "^7.18.6"
@@ -1039,7 +1103,41 @@
debug "^4.1.0"
globals "^11.1.0"
-"@babel/types@^7.0.0", "@babel/types@^7.3.0", "@babel/types@^7.9.5":
+"@babel/traverse@^7.18.9", "@babel/traverse@^7.19.0", "@babel/traverse@^7.19.1", "@babel/traverse@^7.19.6", "@babel/traverse@^7.20.0":
+ version "7.20.0"
+ resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.20.0.tgz#538c4c6ce6255f5666eba02252a7b59fc2d5ed98"
+ integrity sha512-5+cAXQNARgjRUK0JWu2UBwja4JLSO/rBMPJzpsKb+oBF5xlUuCfljQepS4XypBQoiigL0VQjTZy6WiONtUdScQ==
+ dependencies:
+ "@babel/code-frame" "^7.18.6"
+ "@babel/generator" "^7.20.0"
+ "@babel/helper-environment-visitor" "^7.18.9"
+ "@babel/helper-function-name" "^7.19.0"
+ "@babel/helper-hoist-variables" "^7.18.6"
+ "@babel/helper-split-export-declaration" "^7.18.6"
+ "@babel/parser" "^7.20.0"
+ "@babel/types" "^7.20.0"
+ debug "^4.1.0"
+ globals "^11.1.0"
+
+"@babel/types@^7.0.0", "@babel/types@^7.17.0":
+ version "7.18.13"
+ resolved "https://registry.npmjs.org/@babel/types/-/types-7.18.13.tgz"
+ integrity sha512-ePqfTihzW0W6XAU+aMw2ykilisStJfDnsejDCXRchCcMJ4O0+8DhPXf2YUbZ6wjBlsEmZwLK/sPweWtu8hcJYQ==
+ dependencies:
+ "@babel/helper-string-parser" "^7.18.10"
+ "@babel/helper-validator-identifier" "^7.18.6"
+ to-fast-properties "^2.0.0"
+
+"@babel/types@^7.18.10", "@babel/types@^7.18.13", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.19.0", "@babel/types@^7.19.4", "@babel/types@^7.20.0", "@babel/types@^7.4.4":
+ version "7.20.0"
+ resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.20.0.tgz#52c94cf8a7e24e89d2a194c25c35b17a64871479"
+ integrity sha512-Jlgt3H0TajCW164wkTOTzHkZb075tMQMULzrLUoUeKmO7eFL96GgDxf7/Axhc5CAuKE3KFyVW1p6ysKsi2oXAg==
+ dependencies:
+ "@babel/helper-string-parser" "^7.19.4"
+ "@babel/helper-validator-identifier" "^7.19.1"
+ to-fast-properties "^2.0.0"
+
+"@babel/types@^7.3.0", "@babel/types@^7.9.5":
version "7.18.7"
resolved "https://registry.npmjs.org/@babel/types/-/types-7.18.7.tgz"
integrity sha512-QG3yxTcTIBoAcQmkCs+wAPYZhu7Dk9rXKacINfNbdJDNERTbLQbHGyVG8q/YGMPeCJRIhSY0+fTc5+xuh6WPSQ==
@@ -1047,15 +1145,6 @@
"@babel/helper-validator-identifier" "^7.18.6"
to-fast-properties "^2.0.0"
-"@babel/types@^7.17.0", "@babel/types@^7.18.10", "@babel/types@^7.18.13", "@babel/types@^7.18.4", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.4.4":
- version "7.18.13"
- resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.18.13.tgz#30aeb9e514f4100f7c1cb6e5ba472b30e48f519a"
- integrity sha512-ePqfTihzW0W6XAU+aMw2ykilisStJfDnsejDCXRchCcMJ4O0+8DhPXf2YUbZ6wjBlsEmZwLK/sPweWtu8hcJYQ==
- dependencies:
- "@babel/helper-string-parser" "^7.18.10"
- "@babel/helper-validator-identifier" "^7.18.6"
- to-fast-properties "^2.0.0"
-
"@csstools/postcss-color-function@^1.0.3":
version "1.1.0"
resolved "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-1.1.0.tgz"
@@ -1296,7 +1385,7 @@
"@ioredis/commands@^1.1.1":
version "1.2.0"
- resolved "https://registry.yarnpkg.com/@ioredis/commands/-/commands-1.2.0.tgz#6d61b3097470af1fdbbe622795b8921d42018e11"
+ resolved "https://registry.npmjs.org/@ioredis/commands/-/commands-1.2.0.tgz"
integrity sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg==
"@jridgewell/gen-mapping@^0.1.0":
@@ -1316,14 +1405,14 @@
"@jridgewell/sourcemap-codec" "^1.4.10"
"@jridgewell/trace-mapping" "^0.3.9"
-"@jridgewell/resolve-uri@^3.0.3":
+"@jridgewell/resolve-uri@3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78"
integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==
"@jridgewell/set-array@^1.0.0", "@jridgewell/set-array@^1.0.1":
version "1.1.2"
- resolved "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz"
+ resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72"
integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==
"@jridgewell/source-map@^0.3.2":
@@ -1334,95 +1423,272 @@
"@jridgewell/gen-mapping" "^0.3.0"
"@jridgewell/trace-mapping" "^0.3.9"
-"@jridgewell/sourcemap-codec@^1.4.10":
+"@jridgewell/sourcemap-codec@1.4.14", "@jridgewell/sourcemap-codec@^1.4.10":
version "1.4.14"
resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24"
integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==
"@jridgewell/trace-mapping@^0.3.9":
- version "0.3.14"
- resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz"
- integrity sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ==
+ version "0.3.17"
+ resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz#793041277af9073b0951a7fe0f0d8c4c98c36985"
+ integrity sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==
dependencies:
- "@jridgewell/resolve-uri" "^3.0.3"
- "@jridgewell/sourcemap-codec" "^1.4.10"
+ "@jridgewell/resolve-uri" "3.1.0"
+ "@jridgewell/sourcemap-codec" "1.4.14"
-"@next/env@12.2.5":
- version "12.2.5"
- resolved "https://registry.yarnpkg.com/@next/env/-/env-12.2.5.tgz#d908c57b35262b94db3e431e869b72ac3e1ad3e3"
- integrity sha512-vLPLV3cpPGjUPT3PjgRj7e3nio9t6USkuew3JE/jMeon/9Mvp1WyR18v3iwnCuX7eUAm1HmAbJHHLAbcu/EJcw==
+"@netlify/esbuild-android-64@0.14.39":
+ version "0.14.39"
+ resolved "https://registry.yarnpkg.com/@netlify/esbuild-android-64/-/esbuild-android-64-0.14.39.tgz#7bd30aba94a92351d2c5e25e178ceb824f3c2f99"
+ integrity sha512-azq+lsvjRsKLap8ubIwSJXGyknUACqYu5h98Fvyoh40Qk4QXIVKl16JIJ4s+B7jy2k9qblEc5c4nxdDA3aGbVA==
-"@next/eslint-plugin-next@12.2.5":
- version "12.2.5"
- resolved "https://registry.yarnpkg.com/@next/eslint-plugin-next/-/eslint-plugin-next-12.2.5.tgz#4f3acccd2ed4f9300fbf9fd480cc8a0b261889a8"
- integrity sha512-VBjVbmqEzGiOTBq4+wpeVXt/KgknnGB6ahvC/AxiIGnN93/RCSyXhFRI4uSfftM2Ba3w7ZO7076bfKasZsA0fw==
+"@netlify/esbuild-android-arm64@0.14.39":
+ version "0.14.39"
+ resolved "https://registry.yarnpkg.com/@netlify/esbuild-android-arm64/-/esbuild-android-arm64-0.14.39.tgz#0b3e11efaa9379792592173152eba2c9f8b933b0"
+ integrity sha512-WhIP7ePq4qMC1sxoaeB9SsJqSW6uzW7XDj/IuWl1l9r94nwxywU1sYdVLaF2mZr15njviazYjVr8x1d+ipwL3w==
+
+"@netlify/esbuild-darwin-64@0.14.39":
+ version "0.14.39"
+ resolved "https://registry.yarnpkg.com/@netlify/esbuild-darwin-64/-/esbuild-darwin-64-0.14.39.tgz#bb4a3a244723351dabd3cd0553425d087901c408"
+ integrity sha512-eF4GvLYiDxtcyjFT55+h+8c8A2HltjeMezCqkt3AQSgOdu1nhlvwbBhIdg2dyM6gKEaEm5hBtTbicEDSwsLodA==
+
+"@netlify/esbuild-darwin-arm64@0.14.39":
+ version "0.14.39"
+ resolved "https://registry.yarnpkg.com/@netlify/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.39.tgz#48e5abd7d32cdefe4db30026e21c5173afae3c8d"
+ integrity sha512-b7rtnX/VtYwNbUCxs3eulrCWJ+u2YvqDcXiIV1ka+od+N0fTx+4RrVkVp1lha9L0wEJYK9J7UWZOMLMyd1ynRg==
+
+"@netlify/esbuild-freebsd-64@0.14.39":
+ version "0.14.39"
+ resolved "https://registry.yarnpkg.com/@netlify/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.39.tgz#d9650ba7ac0df826ad8928cc3b02e16d00c259b0"
+ integrity sha512-XtusxDJt2hUKUdggbTFolMx0kJL2zEa4STI7YwpB+ukEWoW5rODZjiLZbqqYLcjDH8k4YwHaMxs103L8eButEQ==
+
+"@netlify/esbuild-freebsd-arm64@0.14.39":
+ version "0.14.39"
+ resolved "https://registry.yarnpkg.com/@netlify/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.39.tgz#4e1401e44f79e007dc43b6edac737d010685f9f0"
+ integrity sha512-A9XZKai+k6kfndCtN6Dh2usT28V0+OGxzFdZsANONPQiEUTrGZCgwcHWiVlVn7SeAwPR1tKZreTnvrfj8cj7hA==
+
+"@netlify/esbuild-linux-32@0.14.39":
+ version "0.14.39"
+ resolved "https://registry.yarnpkg.com/@netlify/esbuild-linux-32/-/esbuild-linux-32-0.14.39.tgz#fb017e160d8caa72efa36cf9a2748cd01165a463"
+ integrity sha512-ZQnqk/82YRvINY+aF+LlGfRZ19c5mH0jaxsO046GpIOPx6PcXHG8JJ2lg+vLJVe4zFPohxzabcYpwFuT4cg/GA==
+
+"@netlify/esbuild-linux-64@0.14.39":
+ version "0.14.39"
+ resolved "https://registry.yarnpkg.com/@netlify/esbuild-linux-64/-/esbuild-linux-64-0.14.39.tgz#d89f1aed0f3607b092ca2f57556725af3ceb8252"
+ integrity sha512-IQtswVw7GAKNX/3yV390wSfSXvMWy0d5cw8csAffwBk9gupftY2lzepK4Cn6uD/aqLt3Iku33FbHop/2nPGfQA==
+
+"@netlify/esbuild-linux-arm64@0.14.39":
+ version "0.14.39"
+ resolved "https://registry.yarnpkg.com/@netlify/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.39.tgz#faf6e1e2587045df193d4893e4c30237e2cb84e9"
+ integrity sha512-4Jie4QV6pWWuGN7TAshNMGbdTA9+VbRkv3rPIxhgK5gBfmsAV1yRKsumE4Y77J0AZNRiOriyoec4zc1qkmI3zg==
+
+"@netlify/esbuild-linux-arm@0.14.39":
+ version "0.14.39"
+ resolved "https://registry.yarnpkg.com/@netlify/esbuild-linux-arm/-/esbuild-linux-arm-0.14.39.tgz#bd43359c9e00caebf9bd8f47b8fc7606f5433618"
+ integrity sha512-QdOzQniOed0Bz1cTC9TMMwvtAqKayYv66H4edJlbvElC81yJZF/c9XhmYWJ6P5g4nkChZubQ5RcQwTLmrFGexg==
+
+"@netlify/esbuild-linux-mips64le@0.14.39":
+ version "0.14.39"
+ resolved "https://registry.yarnpkg.com/@netlify/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.39.tgz#0d69730b40175406e943bbf519a4de85750e1ed3"
+ integrity sha512-Htozxr95tw4tSd86YNbCLs1eoYQzNu/cHpzFIkuJoztZueUhl8XpRvBdob7n3kEjW1gitLWAIn8XUwSt+aJ1Tg==
+
+"@netlify/esbuild-linux-ppc64le@0.14.39":
+ version "0.14.39"
+ resolved "https://registry.yarnpkg.com/@netlify/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.39.tgz#18fd4c7190496382501bb95c3f015f7ec1b0acb2"
+ integrity sha512-tFy0ufWIdjeuk1rPHee00TZlhr9OSF00Ufb4ROFyt2ArKuMSkWRJuDgx6MtZcAnCIN4cybo/xWl3MKTM+scnww==
+
+"@netlify/esbuild-linux-riscv64@0.14.39":
+ version "0.14.39"
+ resolved "https://registry.yarnpkg.com/@netlify/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.39.tgz#c9dc6af7e999ead24e2d68443c8c630094908930"
+ integrity sha512-ZzfKvwIxL7wQnYbVFpyNW0wotnLoKageUEM57RbjekesJoNQnqUR6Usm+LDZoB8iRsI58VX1IxnstP0cX8vOHw==
+
+"@netlify/esbuild-linux-s390x@0.14.39":
+ version "0.14.39"
+ resolved "https://registry.yarnpkg.com/@netlify/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.39.tgz#8b87c0a09397b014e9f4fb3873c891ea0d81df40"
+ integrity sha512-yjC0mFwnuMRoh0WcF0h71MF71ytZBFEQQTRdgiGT0+gbC4UApBqnTkJdLx32RscBKi9skbMChiJ748hDJou6FA==
+
+"@netlify/esbuild-netbsd-64@0.14.39":
+ version "0.14.39"
+ resolved "https://registry.yarnpkg.com/@netlify/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.39.tgz#3f049e25a6d00f17519220ab2f5e15f027edadae"
+ integrity sha512-mIq4znOoz3YfTVdv3sIWfR4Zx5JgMnT4srlhC5KYVHibhxvyDdin5txldYXmR4Zv4dZd6DSuWFsn441aUegHeA==
+
+"@netlify/esbuild-openbsd-64@0.14.39":
+ version "0.14.39"
+ resolved "https://registry.yarnpkg.com/@netlify/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.39.tgz#02396cf8e8ca01484df58a191d301adc587397c9"
+ integrity sha512-+t6QdzJCngH19hV7ClpFAeFDI2ko/HNcFbiNwaXTMVLB3hWi1sJtn+fzZck5HfzN4qsajAVqZq4nwX69SSt25A==
+
+"@netlify/esbuild-sunos-64@0.14.39":
+ version "0.14.39"
+ resolved "https://registry.yarnpkg.com/@netlify/esbuild-sunos-64/-/esbuild-sunos-64-0.14.39.tgz#97c3152aa7ceaf51247998c836f94773975e716e"
+ integrity sha512-HLfXG6i2p3wyyyWHeeP4ShGDJ1zRMnf9YLJLe2ezv2KqvcKw/Un/m/FBuDW1p13oSUO7ShISMzgc1dw1GGBEOQ==
+
+"@netlify/esbuild-windows-32@0.14.39":
+ version "0.14.39"
+ resolved "https://registry.yarnpkg.com/@netlify/esbuild-windows-32/-/esbuild-windows-32-0.14.39.tgz#ccb2a234954714662a4cd1a573d5b271f5288273"
+ integrity sha512-ZpSQcKbVSCU3ln7mHpsL/5dWsUqCNdTnC5YAArnaOwdrlIunrsbo5j4MOZRRcGExb2uvTc/rb+D3mlGb8j1rkA==
+
+"@netlify/esbuild-windows-64@0.14.39":
+ version "0.14.39"
+ resolved "https://registry.yarnpkg.com/@netlify/esbuild-windows-64/-/esbuild-windows-64-0.14.39.tgz#477c22c04a3299599924e9e4c909c0dec5612f56"
+ integrity sha512-I3gCdO8+6IDhT4Y1ZmV4o2Gg0oELv7N4kCcE4kqclz10fWHNjf19HQNHyBJe0AWnFV5ZfT154VVD31dqgwpgFw==
+
+"@netlify/esbuild-windows-arm64@0.14.39":
+ version "0.14.39"
+ resolved "https://registry.yarnpkg.com/@netlify/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.39.tgz#10446d91ca603fa28067541cfa1526081c6ee09b"
+ integrity sha512-WX52W8U1lsfWcz6NWoSpDs57lgiiMHN23seq8G2bvxzGS/tvYD3dxVLLW5UPoKSnFDyVQT7b6Zkt6AkBten1yQ==
+
+"@netlify/esbuild@0.14.39":
+ version "0.14.39"
+ resolved "https://registry.yarnpkg.com/@netlify/esbuild/-/esbuild-0.14.39.tgz#66897af6d26336e5960b5ba74f1642f1d02a9c6a"
+ integrity sha512-C3xpwdT2xw6SnSb+hLQoxjtikAKiz6BjQjzlIaysHDpGbmIcmUHZ/X+dyLtCqAvf15WNK5GSBZYOlpgcOE0WZA==
+ optionalDependencies:
+ "@netlify/esbuild-android-64" "0.14.39"
+ "@netlify/esbuild-android-arm64" "0.14.39"
+ "@netlify/esbuild-darwin-64" "0.14.39"
+ "@netlify/esbuild-darwin-arm64" "0.14.39"
+ "@netlify/esbuild-freebsd-64" "0.14.39"
+ "@netlify/esbuild-freebsd-arm64" "0.14.39"
+ "@netlify/esbuild-linux-32" "0.14.39"
+ "@netlify/esbuild-linux-64" "0.14.39"
+ "@netlify/esbuild-linux-arm" "0.14.39"
+ "@netlify/esbuild-linux-arm64" "0.14.39"
+ "@netlify/esbuild-linux-mips64le" "0.14.39"
+ "@netlify/esbuild-linux-ppc64le" "0.14.39"
+ "@netlify/esbuild-linux-riscv64" "0.14.39"
+ "@netlify/esbuild-linux-s390x" "0.14.39"
+ "@netlify/esbuild-netbsd-64" "0.14.39"
+ "@netlify/esbuild-openbsd-64" "0.14.39"
+ "@netlify/esbuild-sunos-64" "0.14.39"
+ "@netlify/esbuild-windows-32" "0.14.39"
+ "@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==
+ dependencies:
+ is-promise "^4.0.0"
+
+"@netlify/ipx@^1.3.1":
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/@netlify/ipx/-/ipx-1.3.1.tgz#0330e1e5025ea1a12c3e6fba6a3e0f0d0df741f3"
+ integrity sha512-kjw26KYM1jLe+bGRnhqxWs0ACG8eg6kN6wV7uqUu1J8dE6QC73ksyVtCA6IAHl3/5qf5RyMUzquNCp0N0+lXEw==
+ dependencies:
+ "@netlify/functions" "^1.3.0"
+ etag "^1.8.1"
+ fs-extra "^10.0.0"
+ ipx "^0.9.11"
+ micromatch "^4.0.5"
+ mkdirp "^1.0.4"
+ murmurhash "^2.0.0"
+ node-fetch "^2.0.0"
+ ufo "^0.8.0"
+ unstorage "^0.6.0"
+
+"@netlify/plugin-nextjs@^4.27.3":
+ version "4.29.2"
+ resolved "https://registry.yarnpkg.com/@netlify/plugin-nextjs/-/plugin-nextjs-4.29.2.tgz#b59e484d12ccc50c54282dd49fcfe27cc692e7d0"
+ integrity sha512-Sxaf+eITuDEMUOQ5ySMMDibwi3KmLgbQ5gLVDFuOnm/YDe9l3cHTwJf0Sn4BkvDPTaz6p0kkxAHo2ANt91qwuA==
+ dependencies:
+ "@netlify/esbuild" "0.14.39"
+ "@netlify/functions" "^1.3.0"
+ "@netlify/ipx" "^1.3.1"
+ "@vercel/node-bridge" "^2.1.0"
+ chalk "^4.1.2"
+ destr "^1.1.1"
+ execa "^5.1.1"
+ follow-redirects "^1.15.2"
+ fs-extra "^10.0.0"
+ globby "^11.0.4"
+ merge-stream "^2.0.0"
+ moize "^6.1.0"
+ node-fetch "^2.6.6"
+ node-stream-zip "^1.15.0"
+ outdent "^0.8.0"
+ p-limit "^3.1.0"
+ pathe "^0.2.0"
+ pretty-bytes "^5.6.0"
+ regexp-tree "^0.1.24"
+ semver "^7.3.5"
+ slash "^3.0.0"
+ tiny-glob "^0.2.9"
+
+"@next/env@12.3.4":
+ version "12.3.4"
+ resolved "https://registry.yarnpkg.com/@next/env/-/env-12.3.4.tgz#c787837d36fcad75d72ff8df6b57482027d64a47"
+ integrity sha512-H/69Lc5Q02dq3o+dxxy5O/oNxFsZpdL6WREtOOtOM1B/weonIwDXkekr1KV5DPVPr12IHFPrMrcJQ6bgPMfn7A==
+
+"@next/eslint-plugin-next@12.3.4":
+ version "12.3.4"
+ resolved "https://registry.yarnpkg.com/@next/eslint-plugin-next/-/eslint-plugin-next-12.3.4.tgz#e7dc00e2e89ed361f111d687b8534483ec15518b"
+ integrity sha512-BFwj8ykJY+zc1/jWANsDprDIu2MgwPOIKxNVnrKvPs+f5TPegrVnem8uScND+1veT4B7F6VeqgaNLFW1Hzl9Og==
dependencies:
glob "7.1.7"
-"@next/swc-android-arm-eabi@12.2.5":
- version "12.2.5"
- resolved "https://registry.yarnpkg.com/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-12.2.5.tgz#903a5479ab4c2705d9c08d080907475f7bacf94d"
- integrity sha512-cPWClKxGhgn2dLWnspW+7psl3MoLQUcNqJqOHk2BhNcou9ARDtC0IjQkKe5qcn9qg7I7U83Gp1yh2aesZfZJMA==
+"@next/swc-android-arm-eabi@12.3.4":
+ version "12.3.4"
+ resolved "https://registry.yarnpkg.com/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-12.3.4.tgz#fd1c2dafe92066c6120761c6a39d19e666dc5dd0"
+ integrity sha512-cM42Cw6V4Bz/2+j/xIzO8nK/Q3Ly+VSlZJTa1vHzsocJRYz8KT6MrreXaci2++SIZCF1rVRCDgAg5PpqRibdIA==
-"@next/swc-android-arm64@12.2.5":
- version "12.2.5"
- resolved "https://registry.yarnpkg.com/@next/swc-android-arm64/-/swc-android-arm64-12.2.5.tgz#2f9a98ec4166c7860510963b31bda1f57a77c792"
- integrity sha512-vMj0efliXmC5b7p+wfcQCX0AfU8IypjkzT64GiKJD9PgiA3IILNiGJr1fw2lyUDHkjeWx/5HMlMEpLnTsQslwg==
+"@next/swc-android-arm64@12.3.4":
+ version "12.3.4"
+ resolved "https://registry.yarnpkg.com/@next/swc-android-arm64/-/swc-android-arm64-12.3.4.tgz#11a146dae7b8bca007239b21c616e83f77b19ed4"
+ integrity sha512-5jf0dTBjL+rabWjGj3eghpLUxCukRhBcEJgwLedewEA/LJk2HyqCvGIwj5rH+iwmq1llCWbOky2dO3pVljrapg==
-"@next/swc-darwin-arm64@12.2.5":
- version "12.2.5"
- resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-12.2.5.tgz#31b1c3c659d54be546120c488a1e1bad21c24a1d"
- integrity sha512-VOPWbO5EFr6snla/WcxUKtvzGVShfs302TEMOtzYyWni6f9zuOetijJvVh9CCTzInnXAZMtHyNhefijA4HMYLg==
+"@next/swc-darwin-arm64@12.3.4":
+ version "12.3.4"
+ resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-12.3.4.tgz#14ac8357010c95e67327f47082af9c9d75d5be79"
+ integrity sha512-DqsSTd3FRjQUR6ao0E1e2OlOcrF5br+uegcEGPVonKYJpcr0MJrtYmPxd4v5T6UCJZ+XzydF7eQo5wdGvSZAyA==
-"@next/swc-darwin-x64@12.2.5":
- version "12.2.5"
- resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-12.2.5.tgz#2e44dd82b2b7fef88238d1bc4d3bead5884cedfd"
- integrity sha512-5o8bTCgAmtYOgauO/Xd27vW52G2/m3i5PX7MUYePquxXAnX73AAtqA3WgPXBRitEB60plSKZgOTkcpqrsh546A==
+"@next/swc-darwin-x64@12.3.4":
+ version "12.3.4"
+ resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-12.3.4.tgz#e7dc63cd2ac26d15fb84d4d2997207fb9ba7da0f"
+ integrity sha512-PPF7tbWD4k0dJ2EcUSnOsaOJ5rhT3rlEt/3LhZUGiYNL8KvoqczFrETlUx0cUYaXe11dRA3F80Hpt727QIwByQ==
-"@next/swc-freebsd-x64@12.2.5":
- version "12.2.5"
- resolved "https://registry.yarnpkg.com/@next/swc-freebsd-x64/-/swc-freebsd-x64-12.2.5.tgz#e24e75d8c2581bfebc75e4f08f6ddbd116ce9dbd"
- integrity sha512-yYUbyup1JnznMtEBRkK4LT56N0lfK5qNTzr6/DEyDw5TbFVwnuy2hhLBzwCBkScFVjpFdfiC6SQAX3FrAZzuuw==
+"@next/swc-freebsd-x64@12.3.4":
+ version "12.3.4"
+ resolved "https://registry.yarnpkg.com/@next/swc-freebsd-x64/-/swc-freebsd-x64-12.3.4.tgz#fe7ceec58746fdf03f1fcb37ec1331c28e76af93"
+ integrity sha512-KM9JXRXi/U2PUM928z7l4tnfQ9u8bTco/jb939pdFUHqc28V43Ohd31MmZD1QzEK4aFlMRaIBQOWQZh4D/E5lQ==
-"@next/swc-linux-arm-gnueabihf@12.2.5":
- version "12.2.5"
- resolved "https://registry.yarnpkg.com/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-12.2.5.tgz#46d8c514d834d2b5f67086013f0bd5e3081e10b9"
- integrity sha512-2ZE2/G921Acks7UopJZVMgKLdm4vN4U0yuzvAMJ6KBavPzqESA2yHJlm85TV/K9gIjKhSk5BVtauIUntFRP8cg==
+"@next/swc-linux-arm-gnueabihf@12.3.4":
+ version "12.3.4"
+ resolved "https://registry.yarnpkg.com/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-12.3.4.tgz#d7016934d02bfc8bd69818ffb0ae364b77b17af7"
+ integrity sha512-3zqD3pO+z5CZyxtKDTnOJ2XgFFRUBciOox6EWkoZvJfc9zcidNAQxuwonUeNts6Xbm8Wtm5YGIRC0x+12YH7kw==
-"@next/swc-linux-arm64-gnu@12.2.5":
- version "12.2.5"
- resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-12.2.5.tgz#91f725ac217d3a1f4f9f53b553615ba582fd3d9f"
- integrity sha512-/I6+PWVlz2wkTdWqhlSYYJ1pWWgUVva6SgX353oqTh8njNQp1SdFQuWDqk8LnM6ulheVfSsgkDzxrDaAQZnzjQ==
+"@next/swc-linux-arm64-gnu@12.3.4":
+ version "12.3.4"
+ resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-12.3.4.tgz#43a7bc409b03487bff5beb99479cacdc7bd29af5"
+ integrity sha512-kiX0vgJGMZVv+oo1QuObaYulXNvdH/IINmvdZnVzMO/jic/B8EEIGlZ8Bgvw8LCjH3zNVPO3mGrdMvnEEPEhKA==
-"@next/swc-linux-arm64-musl@12.2.5":
- version "12.2.5"
- resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-12.2.5.tgz#e627e8c867920995810250303cd9b8e963598383"
- integrity sha512-LPQRelfX6asXyVr59p5sTpx5l+0yh2Vjp/R8Wi4X9pnqcayqT4CUJLiHqCvZuLin3IsFdisJL0rKHMoaZLRfmg==
+"@next/swc-linux-arm64-musl@12.3.4":
+ version "12.3.4"
+ resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-12.3.4.tgz#4d1db6de6dc982b974cd1c52937111e3e4a34bd3"
+ integrity sha512-EETZPa1juczrKLWk5okoW2hv7D7WvonU+Cf2CgsSoxgsYbUCZ1voOpL4JZTOb6IbKMDo6ja+SbY0vzXZBUMvkQ==
-"@next/swc-linux-x64-gnu@12.2.5":
- version "12.2.5"
- resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-12.2.5.tgz#83a5e224fbc4d119ef2e0f29d0d79c40cc43887e"
- integrity sha512-0szyAo8jMCClkjNK0hknjhmAngUppoRekW6OAezbEYwHXN/VNtsXbfzgYOqjKWxEx3OoAzrT3jLwAF0HdX2MEw==
+"@next/swc-linux-x64-gnu@12.3.4":
+ version "12.3.4"
+ resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-12.3.4.tgz#c3b414d77bab08b35f7dd8943d5586f0adb15e38"
+ integrity sha512-4csPbRbfZbuWOk3ATyWcvVFdD9/Rsdq5YHKvRuEni68OCLkfy4f+4I9OBpyK1SKJ00Cih16NJbHE+k+ljPPpag==
-"@next/swc-linux-x64-musl@12.2.5":
- version "12.2.5"
- resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-12.2.5.tgz#be700d48471baac1ec2e9539396625584a317e95"
- integrity sha512-zg/Y6oBar1yVnW6Il1I/08/2ukWtOG6s3acdJdEyIdsCzyQi4RLxbbhkD/EGQyhqBvd3QrC6ZXQEXighQUAZ0g==
+"@next/swc-linux-x64-musl@12.3.4":
+ version "12.3.4"
+ resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-12.3.4.tgz#187a883ec09eb2442a5ebf126826e19037313c61"
+ integrity sha512-YeBmI+63Ro75SUiL/QXEVXQ19T++58aI/IINOyhpsRL1LKdyfK/35iilraZEFz9bLQrwy1LYAR5lK200A9Gjbg==
-"@next/swc-win32-arm64-msvc@12.2.5":
- version "12.2.5"
- resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-12.2.5.tgz#a93e958133ad3310373fda33a79aa10af2a0aa97"
- integrity sha512-3/90DRNSqeeSRMMEhj4gHHQlLhhKg5SCCoYfE3kBjGpE63EfnblYUqsszGGZ9ekpKL/R4/SGB40iCQr8tR5Jiw==
+"@next/swc-win32-arm64-msvc@12.3.4":
+ version "12.3.4"
+ resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-12.3.4.tgz#89befa84e453ed2ef9a888f375eba565a0fde80b"
+ integrity sha512-Sd0qFUJv8Tj0PukAYbCCDbmXcMkbIuhnTeHm9m4ZGjCf6kt7E/RMs55Pd3R5ePjOkN7dJEuxYBehawTR/aPDSQ==
-"@next/swc-win32-ia32-msvc@12.2.5":
- version "12.2.5"
- resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-12.2.5.tgz#4f5f7ba0a98ff89a883625d4af0125baed8b2e19"
- integrity sha512-hGLc0ZRAwnaPL4ulwpp4D2RxmkHQLuI8CFOEEHdzZpS63/hMVzv81g8jzYA0UXbb9pus/iTc3VRbVbAM03SRrw==
+"@next/swc-win32-ia32-msvc@12.3.4":
+ version "12.3.4"
+ resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-12.3.4.tgz#cb50c08f0e40ead63642a7f269f0c8254261f17c"
+ integrity sha512-rt/vv/vg/ZGGkrkKcuJ0LyliRdbskQU+91bje+PgoYmxTZf/tYs6IfbmgudBJk6gH3QnjHWbkphDdRQrseRefQ==
-"@next/swc-win32-x64-msvc@12.2.5":
- version "12.2.5"
- resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-12.2.5.tgz#20fed129b04a0d3f632c6d0de135345bb623b1e4"
- integrity sha512-7h5/ahY7NeaO2xygqVrSG/Y8Vs4cdjxIjowTZ5W6CKoTKn7tmnuxlUc2h74x06FKmbhAd9agOjr/AOKyxYYm9Q==
+"@next/swc-win32-x64-msvc@12.3.4":
+ version "12.3.4"
+ resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-12.3.4.tgz#d28ea15a72cdcf96201c60a43e9630cd7fda168f"
+ integrity sha512-DQ20JEfTBZAgF8QCjYfJhv2/279M6onxFjdG/+5B0Cyj00/EdBxiWb2eGGFgQhrBbNv/lsvzFbbi0Ptf8Vw/bg==
"@nodelib/fs.scandir@2.1.5":
version "2.1.5"
@@ -1445,108 +1711,142 @@
"@nodelib/fs.scandir" "2.1.5"
fastq "^1.6.0"
-"@prisma/client@4.3.1":
- version "4.3.1"
- resolved "https://registry.yarnpkg.com/@prisma/client/-/client-4.3.1.tgz#b9aad9bd9bd43e7f715ec1d763c8bd9273688800"
- integrity sha512-FA0/d1VMJNWqzU7WVWTNWJ+lGOLR9JUBnF73GdIPAEVo/6dWk4gHx0EmgeU+SMv4MZoxgOeTBJF2azhg7x0hMw==
+"@prisma/client@4.5.0":
+ version "4.5.0"
+ resolved "https://registry.yarnpkg.com/@prisma/client/-/client-4.5.0.tgz#f708549bee3da396d5741d846b4e4306b120210c"
+ integrity sha512-B2cV0OPI1smhdYUxsJoLYQLoMlLH06MUxgFUWQnHodGMX98VRVXKmQE/9OcrTNkqtke5RC+YU24Szxd04tZA2g==
dependencies:
- "@prisma/engines-version" "4.3.0-32.c875e43600dfe042452e0b868f7a48b817b9640b"
+ "@prisma/engines-version" "4.5.0-43.0362da9eebca54d94c8ef5edd3b2e90af99ba452"
-"@prisma/engines-version@4.3.0-32.c875e43600dfe042452e0b868f7a48b817b9640b":
- version "4.3.0-32.c875e43600dfe042452e0b868f7a48b817b9640b"
- resolved "https://registry.yarnpkg.com/@prisma/engines-version/-/engines-version-4.3.0-32.c875e43600dfe042452e0b868f7a48b817b9640b.tgz#a564dd6fb6f25405fe06164989ebd8a1e4bb3508"
- integrity sha512-8yWpXkQRmiSfsi2Wb/ZS5D3RFbeu/btL9Pm/gdF4phB0Lo5KGsDFMxFMgaD64mwED2nHc8ZaEJg/+4Jymb9Znw==
+"@prisma/engines-version@4.5.0-43.0362da9eebca54d94c8ef5edd3b2e90af99ba452":
+ version "4.5.0-43.0362da9eebca54d94c8ef5edd3b2e90af99ba452"
+ resolved "https://registry.yarnpkg.com/@prisma/engines-version/-/engines-version-4.5.0-43.0362da9eebca54d94c8ef5edd3b2e90af99ba452.tgz#5b7fae294ee9bd9790d0e7b7a0b0912e4222ac08"
+ integrity sha512-o7LyVx8PPJBLrEzLl6lpxxk2D5VnlM4Fwmrbq0NoT6pr5aa1OuHD9ZG+WJY6TlR/iD9bhmo2LNcxddCMr5Rv2A==
-"@prisma/engines@4.3.1":
- version "4.3.1"
- resolved "https://registry.yarnpkg.com/@prisma/engines/-/engines-4.3.1.tgz#fb0ad69eded13827fb4cd81995a351c234e8327f"
- integrity sha512-4JF/uMaEDAPdcdZNOrnzE3BvrbGpjgV0FcPT3EVoi6I86fWkloqqxBt+KcK/+fIRR0Pxj66uGR9wVH8U1Y13JA==
+"@prisma/engines@4.5.0":
+ version "4.5.0"
+ resolved "https://registry.yarnpkg.com/@prisma/engines/-/engines-4.5.0.tgz#82df347a893a5ae2a67707d44772ba181f4b9328"
+ integrity sha512-4t9ir2SbQQr/wMCNU4YpHWp5hU14J2m3wHUZnGJPpmBF8YtkisxyVyQsKd1e6FyLTaGq8LOLhm6VLYHKqKNm+g==
-"@react-spring/animated@~9.5.2":
- version "9.5.2"
- resolved "https://registry.yarnpkg.com/@react-spring/animated/-/animated-9.5.2.tgz#42785b4f369d9715e9ee32c04b78483e7bb85489"
- integrity sha512-oRlX+MmYLbK8IuUZR7SQUnRjXxJ4PMIZeBkBd1SUWVgVJAHMTfJzPltzm+I6p59qX+qLlklYHfnWaonQKDqLuQ==
+"@react-spring/animated@~9.5.5":
+ version "9.5.5"
+ resolved "https://registry.yarnpkg.com/@react-spring/animated/-/animated-9.5.5.tgz#d3bfd0f62ed13a337463a55d2c93bb23c15bbf3e"
+ integrity sha512-glzViz7syQ3CE6BQOwAyr75cgh0qsihm5lkaf24I0DfU63cMm/3+br299UEYkuaHNmfDfM414uktiPlZCNJbQA==
dependencies:
- "@react-spring/shared" "~9.5.2"
- "@react-spring/types" "~9.5.2"
+ "@react-spring/shared" "~9.5.5"
+ "@react-spring/types" "~9.5.5"
-"@react-spring/core@~9.5.2":
- version "9.5.2"
- resolved "https://registry.yarnpkg.com/@react-spring/core/-/core-9.5.2.tgz#c8450783ce87a82d3f9ab21e2650e42922398ff7"
- integrity sha512-UMRtFH6EfebMp/NMDGCUY5+hZFXsg9iT9hzt/iPzJSz2WMXKBjLoFZHJXcmiVOrIhzHmg1O0pFECn1Wp6pZ5Gw==
+"@react-spring/core@~9.5.5":
+ version "9.5.5"
+ resolved "https://registry.yarnpkg.com/@react-spring/core/-/core-9.5.5.tgz#1d8a4c64630ee26b2295361e1eedfd716a85b4ae"
+ integrity sha512-shaJYb3iX18Au6gkk8ahaF0qx0LpS0Yd+ajb4asBaAQf6WPGuEdJsbsNSgei1/O13JyEATsJl20lkjeslJPMYA==
dependencies:
- "@react-spring/animated" "~9.5.2"
- "@react-spring/rafz" "~9.5.2"
- "@react-spring/shared" "~9.5.2"
- "@react-spring/types" "~9.5.2"
+ "@react-spring/animated" "~9.5.5"
+ "@react-spring/rafz" "~9.5.5"
+ "@react-spring/shared" "~9.5.5"
+ "@react-spring/types" "~9.5.5"
-"@react-spring/konva@~9.5.2":
- version "9.5.2"
- resolved "https://registry.yarnpkg.com/@react-spring/konva/-/konva-9.5.2.tgz#cbc7c75c55c7946481f86c7392a6656bb5b1bf4a"
- integrity sha512-FN8LpbGQtm2pllU9mOyYjYwvLtA9EiIPWk2NVuhhX+5lJZrdCWuEY7EyFpK8PtgZXBdVj8bj7eIu1LlTnARW/A==
+"@react-spring/konva@~9.5.5":
+ version "9.5.5"
+ resolved "https://registry.yarnpkg.com/@react-spring/konva/-/konva-9.5.5.tgz#ddbb30cfa268219d69552aa71188832ca8ab4905"
+ integrity sha512-0CNh+1vCIjNUklTFwMvxg+H83Jo2OWykBrdEA28ccmnpZgkQ8Kq5xyvaPFLzcDKV67OXHnaWiCYKpRbhLy2wng==
dependencies:
- "@react-spring/animated" "~9.5.2"
- "@react-spring/core" "~9.5.2"
- "@react-spring/shared" "~9.5.2"
- "@react-spring/types" "~9.5.2"
+ "@react-spring/animated" "~9.5.5"
+ "@react-spring/core" "~9.5.5"
+ "@react-spring/shared" "~9.5.5"
+ "@react-spring/types" "~9.5.5"
-"@react-spring/native@~9.5.2":
- version "9.5.2"
- resolved "https://registry.yarnpkg.com/@react-spring/native/-/native-9.5.2.tgz#218fa228a746cb2f535ea59b317d2e99cdfed02d"
- integrity sha512-G9BCAKVADLweLR43uyMnTrOnYDb4BboYvqKY+0X1fLs45PNrfbBXnSLot4g+5x3HjblypJgNq7CjHlqZKI980g==
+"@react-spring/native@~9.5.5":
+ version "9.5.5"
+ resolved "https://registry.yarnpkg.com/@react-spring/native/-/native-9.5.5.tgz#4ecc420c7b4c3fefeebd55d852640d36c29ec9c8"
+ integrity sha512-kauqmyJ8u7aVy2bBs22vl1SdB2i5uYIL4rP53k1KDWrFSqJh4j3efWkbTt9uzR5cMXuNVbkNo9OYVFUcQBz50A==
dependencies:
- "@react-spring/animated" "~9.5.2"
- "@react-spring/core" "~9.5.2"
- "@react-spring/shared" "~9.5.2"
- "@react-spring/types" "~9.5.2"
+ "@react-spring/animated" "~9.5.5"
+ "@react-spring/core" "~9.5.5"
+ "@react-spring/shared" "~9.5.5"
+ "@react-spring/types" "~9.5.5"
-"@react-spring/rafz@~9.5.2":
- version "9.5.2"
- resolved "https://registry.yarnpkg.com/@react-spring/rafz/-/rafz-9.5.2.tgz#1264d5df09717cf46d55055da2c55ff84f59073f"
- integrity sha512-xHSRXKKBI/wDUkZGrspkOm4VlgN6lZi8Tw9Jzibp9QKf3neoof+U2mDNgklvnLaasymtUwAq9o4ZfFvQIVNgPQ==
+"@react-spring/rafz@~9.5.5":
+ version "9.5.5"
+ resolved "https://registry.yarnpkg.com/@react-spring/rafz/-/rafz-9.5.5.tgz#62a49c5e294104b79db2a8afdf4f3a274c7f44ca"
+ integrity sha512-F/CLwB0d10jL6My5vgzRQxCNY2RNyDJZedRBK7FsngdCmzoq3V4OqqNc/9voJb9qRC2wd55oGXUeXv2eIaFmsw==
-"@react-spring/shared@~9.5.2":
- version "9.5.2"
- resolved "https://registry.yarnpkg.com/@react-spring/shared/-/shared-9.5.2.tgz#e0a252e06daa3927964460fef05d8092e7d78ffc"
- integrity sha512-/OSf2sjwY4BUnjZL6xMC+H3WxOOhMUCk+yZwgdj40XuyUpk6E6tYyiPeD9Yq5GLsZHodkvE1syVMRVReL4ndAg==
+"@react-spring/shared@~9.5.5":
+ version "9.5.5"
+ resolved "https://registry.yarnpkg.com/@react-spring/shared/-/shared-9.5.5.tgz#9be0b391d546e3e184a24ecbaf40acbaeab7fc73"
+ integrity sha512-YwW70Pa/YXPOwTutExHZmMQSHcNC90kJOnNR4G4mCDNV99hE98jWkIPDOsgqbYx3amIglcFPiYKMaQuGdr8dyQ==
dependencies:
- "@react-spring/rafz" "~9.5.2"
- "@react-spring/types" "~9.5.2"
+ "@react-spring/rafz" "~9.5.5"
+ "@react-spring/types" "~9.5.5"
-"@react-spring/three@~9.5.2":
- version "9.5.2"
- resolved "https://registry.yarnpkg.com/@react-spring/three/-/three-9.5.2.tgz#965ff4e729929ebbb9a1f8e84f3f4acb6acec4f9"
- integrity sha512-3H7Lv8BJZ3dajh0yJA3m9rEbqz5ZNrTCAkhVOeLqgvBlcWU5qVs4luYA1Z7H4vZnLqVtzv+kHAyg3XIpuTOXhQ==
+"@react-spring/three@~9.5.5":
+ version "9.5.5"
+ resolved "https://registry.yarnpkg.com/@react-spring/three/-/three-9.5.5.tgz#c6fbee977007d1980406db20a28ac3f5dc2ce153"
+ integrity sha512-9kTIaSceqFIl5EIrdwM7Z53o5I+9BGNVzbp4oZZYMao+GMAWOosnlQdDG5GeqNsIqfW9fZCEquGqagfKAxftcA==
dependencies:
- "@react-spring/animated" "~9.5.2"
- "@react-spring/core" "~9.5.2"
- "@react-spring/shared" "~9.5.2"
- "@react-spring/types" "~9.5.2"
+ "@react-spring/animated" "~9.5.5"
+ "@react-spring/core" "~9.5.5"
+ "@react-spring/shared" "~9.5.5"
+ "@react-spring/types" "~9.5.5"
-"@react-spring/types@~9.5.2":
- version "9.5.2"
- resolved "https://registry.yarnpkg.com/@react-spring/types/-/types-9.5.2.tgz#cce1b03afbafb23edfb9cd8c517cc7462abffb65"
- integrity sha512-n/wBRSHPqTmEd4BFWY6TeR1o/UY+3ujoqMxLjqy90CcY/ozJzDRuREL3c+pxMeTF2+B7dX33dTPCtFMX51nbxg==
+"@react-spring/types@~9.5.5":
+ version "9.5.5"
+ resolved "https://registry.yarnpkg.com/@react-spring/types/-/types-9.5.5.tgz#c8e94f1b9232ca7cb9d860ea67762ec401b1de14"
+ integrity sha512-7I/qY8H7Enwasxr4jU6WmtNK+RZ4Z/XvSlDvjXFVe7ii1x0MoSlkw6pD7xuac8qrHQRm9BTcbZNyeeKApYsvCg==
-"@react-spring/web@~9.5.2":
- version "9.5.2"
- resolved "https://registry.yarnpkg.com/@react-spring/web/-/web-9.5.2.tgz#762ee6b3c8fea40281e1298f5cf1c0515ad6a794"
- integrity sha512-cusTjbOGTgtbsnpBDjb6Ia+B0lQLE0Fk5rGDog6Sww7hWnLIQ521PMiOBnAWtkntB9eXDUfj7L91nwJviEC0lw==
+"@react-spring/web@~9.5.5":
+ version "9.5.5"
+ resolved "https://registry.yarnpkg.com/@react-spring/web/-/web-9.5.5.tgz#d416abc591aaed930401f0c98a991a8c5b90c382"
+ integrity sha512-+moT8aDX/ho/XAhU+HRY9m0LVV9y9CK6NjSRaI+30Re150pB3iEip6QfnF4qnhSCQ5drpMF0XRXHgOTY/xbtFw==
dependencies:
- "@react-spring/animated" "~9.5.2"
- "@react-spring/core" "~9.5.2"
- "@react-spring/shared" "~9.5.2"
- "@react-spring/types" "~9.5.2"
+ "@react-spring/animated" "~9.5.5"
+ "@react-spring/core" "~9.5.5"
+ "@react-spring/shared" "~9.5.5"
+ "@react-spring/types" "~9.5.5"
-"@react-spring/zdog@~9.5.2":
- version "9.5.2"
- resolved "https://registry.yarnpkg.com/@react-spring/zdog/-/zdog-9.5.2.tgz#a3e451378c23caa4381b5821d3d52c3017740c55"
- integrity sha512-zUX8RzX8gM51g8NJ5Qaf15KNKQgN3qN/8m5FvqmiqZ5ZGqjoHkbCoMD3o2MICTUN1l+d4eUu9TYrmiO2bgJo/g==
+"@react-spring/zdog@~9.5.5":
+ version "9.5.5"
+ resolved "https://registry.yarnpkg.com/@react-spring/zdog/-/zdog-9.5.5.tgz#916dba337637d1151c3c2bc829b5105d15adacb5"
+ integrity sha512-LZgjo2kLlGmUqfE2fdVnvLXz+4eYyQARRvB9KQ4PTEynaETTG89Xgn9YxLrh1p57DzH7gEmTGDZ5hEw3pWqu8g==
dependencies:
- "@react-spring/animated" "~9.5.2"
- "@react-spring/core" "~9.5.2"
- "@react-spring/shared" "~9.5.2"
- "@react-spring/types" "~9.5.2"
+ "@react-spring/animated" "~9.5.5"
+ "@react-spring/core" "~9.5.5"
+ "@react-spring/shared" "~9.5.5"
+ "@react-spring/types" "~9.5.5"
+
+"@redis/bloom@1.1.0":
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/@redis/bloom/-/bloom-1.1.0.tgz#64e310ddee72010676e14296076329e594a1f6c7"
+ integrity sha512-9QovlxmpRtvxVbN0UBcv8WfdSMudNZZTFqCsnBszcQXqaZb/TVe30ScgGEO7u1EAIacTPAo7/oCYjYAxiHLanQ==
+
+"@redis/client@1.4.2":
+ version "1.4.2"
+ resolved "https://registry.yarnpkg.com/@redis/client/-/client-1.4.2.tgz#2a3f5e98bc33b7b979390442e6e08f96e57fabdd"
+ integrity sha512-oUdEjE0I7JS5AyaAjkD3aOXn9NhO7XKyPyXEyrgFDu++VrVBHUPnV6dgEya9TcMuj5nIJRuCzCm8ZP+c9zCHPw==
+ dependencies:
+ cluster-key-slot "1.1.1"
+ generic-pool "3.9.0"
+ yallist "4.0.0"
+
+"@redis/graph@1.1.0":
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/@redis/graph/-/graph-1.1.0.tgz#cc2b82e5141a29ada2cce7d267a6b74baa6dd519"
+ integrity sha512-16yZWngxyXPd+MJxeSr0dqh2AIOi8j9yXKcKCwVaKDbH3HTuETpDVPcLujhFYVPtYrngSco31BUcSa9TH31Gqg==
+
+"@redis/json@1.0.4":
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/@redis/json/-/json-1.0.4.tgz#f372b5f93324e6ffb7f16aadcbcb4e5c3d39bda1"
+ integrity sha512-LUZE2Gdrhg0Rx7AN+cZkb1e6HjoSKaeeW8rYnt89Tly13GBI5eP4CwDVr+MY8BAYfCg4/N15OUrtLoona9uSgw==
+
+"@redis/search@1.1.0":
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/@redis/search/-/search-1.1.0.tgz#7abb18d431f27ceafe6bcb4dd83a3fa67e9ab4df"
+ integrity sha512-NyFZEVnxIJEybpy+YskjgOJRNsfTYqaPbK/Buv6W2kmFNaRk85JiqjJZA5QkRmWvGbyQYwoO5QfDi2wHskKrQQ==
+
+"@redis/time-series@1.0.4":
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/@redis/time-series/-/time-series-1.0.4.tgz#af85eb080f6934580e4d3b58046026b6c2b18717"
+ integrity sha512-ThUIgo2U/g7cCuZavucQTQzA9g9JbDDY2f64u3AbAoz/8vE2lt2U37LamDUVChhaDA3IRT9R6VvJwqnUfTJzng==
"@rollup/plugin-buble@^0.21.3":
version "0.21.3"
@@ -1575,121 +1875,136 @@
picomatch "^2.2.2"
"@rushstack/eslint-patch@^1.1.3":
- version "1.1.4"
- resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.1.4.tgz#0c8b74c50f29ee44f423f7416829c0bf8bb5eb27"
- integrity sha512-LwzQKA4vzIct1zNZzBmRKI9QuNpLgTQMEjsQLf3BXuGYb3QPTP4Yjf6mkdX+X1mYttZ808QpOwAzZjv28kq7DA==
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.2.0.tgz#8be36a1f66f3265389e90b5f9c9962146758f728"
+ integrity sha512-sXo/qW2/pAcmT43VoRKOJbDOfV3cYpq3szSVfIThQXNt+E4DfKj361vaAt3c88U5tPUxzEswam7GW48PJqtKAg==
-"@svgr/babel-plugin-add-jsx-attribute@^6.3.1":
- version "6.3.1"
- resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-6.3.1.tgz#b9a5d84902be75a05ede92e70b338d28ab63fa74"
- integrity sha512-jDBKArXYO1u0B1dmd2Nf8Oy6aTF5vLDfLoO9Oon/GLkqZ/NiggYWZA+a2HpUMH4ITwNqS3z43k8LWApB8S583w==
+"@svgr/babel-plugin-add-jsx-attribute@^6.5.1":
+ version "6.5.1"
+ resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-6.5.1.tgz#74a5d648bd0347bda99d82409d87b8ca80b9a1ba"
+ integrity sha512-9PYGcXrAxitycIjRmZB+Q0JaN07GZIWaTBIGQzfaZv+qr1n8X1XUEJ5rZ/vx6OVD9RRYlrNnXWExQXcmZeD/BQ==
-"@svgr/babel-plugin-remove-jsx-attribute@^6.3.1":
- version "6.3.1"
- resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-6.3.1.tgz#4877995452efc997b36777abe1fde9705ef78e8b"
- integrity sha512-dQzyJ4prwjcFd929T43Z8vSYiTlTu8eafV40Z2gO7zy/SV5GT+ogxRJRBIKWomPBOiaVXFg3jY4S5hyEN3IBjQ==
+"@svgr/babel-plugin-remove-jsx-attribute@*":
+ version "6.5.0"
+ resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-6.5.0.tgz#652bfd4ed0a0699843585cda96faeb09d6e1306e"
+ integrity sha512-8zYdkym7qNyfXpWvu4yq46k41pyNM9SOstoWhKlm+IfdCE1DdnRKeMUPsWIEO/DEkaWxJ8T9esNdG3QwQ93jBA==
-"@svgr/babel-plugin-remove-jsx-empty-expression@^6.3.1":
- version "6.3.1"
- resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-6.3.1.tgz#2d67a0e92904c9be149a5b22d3a3797ce4d7b514"
- integrity sha512-HBOUc1XwSU67fU26V5Sfb8MQsT0HvUyxru7d0oBJ4rA2s4HW3PhyAPC7fV/mdsSGpAvOdd8Wpvkjsr0fWPUO7A==
+"@svgr/babel-plugin-remove-jsx-empty-expression@*":
+ version "6.5.0"
+ resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-6.5.0.tgz#4b78994ab7d39032c729903fc2dd5c0fa4565cb8"
+ integrity sha512-NFdxMq3xA42Kb1UbzCVxplUc0iqSyM9X8kopImvFnB+uSDdzIHOdbs1op8ofAvVRtbg4oZiyRl3fTYeKcOe9Iw==
-"@svgr/babel-plugin-replace-jsx-attribute-value@^6.3.1":
- version "6.3.1"
- resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-6.3.1.tgz#306f5247139c53af70d1778f2719647c747998ee"
- integrity sha512-C12e6aN4BXAolRrI601gPn5MDFCRHO7C4TM8Kks+rDtl8eEq+NN1sak0eAzJu363x3TmHXdZn7+Efd2nr9I5dA==
+"@svgr/babel-plugin-replace-jsx-attribute-value@^6.5.1":
+ version "6.5.1"
+ resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-6.5.1.tgz#fb9d22ea26d2bc5e0a44b763d4c46d5d3f596c60"
+ integrity sha512-8DPaVVE3fd5JKuIC29dqyMB54sA6mfgki2H2+swh+zNJoynC8pMPzOkidqHOSc6Wj032fhl8Z0TVn1GiPpAiJg==
-"@svgr/babel-plugin-svg-dynamic-title@^6.3.1":
- version "6.3.1"
- resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-6.3.1.tgz#6ce26d34cbc93eb81737ef528528907c292e7aa2"
- integrity sha512-6NU55Mmh3M5u2CfCCt6TX29/pPneutrkJnnDCHbKZnjukZmmgUAZLtZ2g6ZoSPdarowaQmAiBRgAHqHmG0vuqA==
+"@svgr/babel-plugin-svg-dynamic-title@^6.5.1":
+ version "6.5.1"
+ resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-6.5.1.tgz#01b2024a2b53ffaa5efceaa0bf3e1d5a4c520ce4"
+ integrity sha512-FwOEi0Il72iAzlkaHrlemVurgSQRDFbk0OC8dSvD5fSBPHltNh7JtLsxmZUhjYBZo2PpcU/RJvvi6Q0l7O7ogw==
-"@svgr/babel-plugin-svg-em-dimensions@^6.3.1":
- version "6.3.1"
- resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-6.3.1.tgz#5ade2a724b290873c30529d1d8cd23523856287a"
- integrity sha512-HV1NGHYTTe1vCNKlBgq/gKuCSfaRlKcHIADn7P8w8U3Zvujdw1rmusutghJ1pZJV7pDt3Gt8ws+SVrqHnBO/Qw==
+"@svgr/babel-plugin-svg-em-dimensions@^6.5.1":
+ version "6.5.1"
+ resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-6.5.1.tgz#dd3fa9f5b24eb4f93bcf121c3d40ff5facecb217"
+ integrity sha512-gWGsiwjb4tw+ITOJ86ndY/DZZ6cuXMNE/SjcDRg+HLuCmwpcjOktwRF9WgAiycTqJD/QXqL2f8IzE2Rzh7aVXA==
-"@svgr/babel-plugin-transform-react-native-svg@^6.3.1":
- version "6.3.1"
- resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-6.3.1.tgz#d654f509d692c3a09dfb475757a44bd9f6ad7ddf"
- integrity sha512-2wZhSHvTolFNeKDAN/ZmIeSz2O9JSw72XD+o2bNp2QAaWqa8KGpn5Yk5WHso6xqfSAiRzAE+GXlsrBO4UP9LLw==
+"@svgr/babel-plugin-transform-react-native-svg@^6.5.1":
+ version "6.5.1"
+ resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-6.5.1.tgz#1d8e945a03df65b601551097d8f5e34351d3d305"
+ integrity sha512-2jT3nTayyYP7kI6aGutkyfJ7UMGtuguD72OjeGLwVNyfPRBD8zQthlvL+fAbAKk5n9ZNcvFkp/b1lZ7VsYqVJg==
-"@svgr/babel-plugin-transform-svg-component@^6.3.1":
- version "6.3.1"
- resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-6.3.1.tgz#21a285dbffdce9567c437ebf0d081bf9210807e6"
- integrity sha512-cZ8Tr6ZAWNUFfDeCKn/pGi976iWSkS8ijmEYKosP+6ktdZ7lW9HVLHojyusPw3w0j8PI4VBeWAXAmi/2G7owxw==
+"@svgr/babel-plugin-transform-svg-component@^6.5.1":
+ version "6.5.1"
+ resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-6.5.1.tgz#48620b9e590e25ff95a80f811544218d27f8a250"
+ integrity sha512-a1p6LF5Jt33O3rZoVRBqdxL350oge54iZWHNI6LJB5tQ7EelvD/Mb1mfBiZNAan0dt4i3VArkFRjA4iObuNykQ==
-"@svgr/babel-preset@^6.3.1":
- version "6.3.1"
- resolved "https://registry.yarnpkg.com/@svgr/babel-preset/-/babel-preset-6.3.1.tgz#8bd1ead79637d395e9362b01dd37cfd59702e152"
- integrity sha512-tQtWtzuMMQ3opH7je+MpwfuRA1Hf3cKdSgTtAYwOBDfmhabP7rcTfBi3E7V3MuwJNy/Y02/7/RutvwS1W4Qv9g==
+"@svgr/babel-preset@^6.5.1":
+ version "6.5.1"
+ resolved "https://registry.yarnpkg.com/@svgr/babel-preset/-/babel-preset-6.5.1.tgz#b90de7979c8843c5c580c7e2ec71f024b49eb828"
+ integrity sha512-6127fvO/FF2oi5EzSQOAjo1LE3OtNVh11R+/8FXa+mHx1ptAaS4cknIjnUA7e6j6fwGGJ17NzaTJFUwOV2zwCw==
dependencies:
- "@svgr/babel-plugin-add-jsx-attribute" "^6.3.1"
- "@svgr/babel-plugin-remove-jsx-attribute" "^6.3.1"
- "@svgr/babel-plugin-remove-jsx-empty-expression" "^6.3.1"
- "@svgr/babel-plugin-replace-jsx-attribute-value" "^6.3.1"
- "@svgr/babel-plugin-svg-dynamic-title" "^6.3.1"
- "@svgr/babel-plugin-svg-em-dimensions" "^6.3.1"
- "@svgr/babel-plugin-transform-react-native-svg" "^6.3.1"
- "@svgr/babel-plugin-transform-svg-component" "^6.3.1"
+ "@svgr/babel-plugin-add-jsx-attribute" "^6.5.1"
+ "@svgr/babel-plugin-remove-jsx-attribute" "*"
+ "@svgr/babel-plugin-remove-jsx-empty-expression" "*"
+ "@svgr/babel-plugin-replace-jsx-attribute-value" "^6.5.1"
+ "@svgr/babel-plugin-svg-dynamic-title" "^6.5.1"
+ "@svgr/babel-plugin-svg-em-dimensions" "^6.5.1"
+ "@svgr/babel-plugin-transform-react-native-svg" "^6.5.1"
+ "@svgr/babel-plugin-transform-svg-component" "^6.5.1"
-"@svgr/core@^6.3.1":
- version "6.3.1"
- resolved "https://registry.yarnpkg.com/@svgr/core/-/core-6.3.1.tgz#752adf49d8d5473b15d76ca741961de093f715bd"
- integrity sha512-Sm3/7OdXbQreemf9aO25keerZSbnKMpGEfmH90EyYpj1e8wMD4TuwJIb3THDSgRMWk1kYJfSRulELBy4gVgZUA==
+"@svgr/core@^6.5.1":
+ version "6.5.1"
+ resolved "https://registry.yarnpkg.com/@svgr/core/-/core-6.5.1.tgz#d3e8aa9dbe3fbd747f9ee4282c1c77a27410488a"
+ integrity sha512-/xdLSWxK5QkqG524ONSjvg3V/FkNyCv538OIBdQqPNaAta3AsXj/Bd2FbvR87yMbXO2hFSWiAe/Q6IkVPDw+mw==
dependencies:
- "@svgr/plugin-jsx" "^6.3.1"
+ "@babel/core" "^7.19.6"
+ "@svgr/babel-preset" "^6.5.1"
+ "@svgr/plugin-jsx" "^6.5.1"
camelcase "^6.2.0"
cosmiconfig "^7.0.1"
-"@svgr/hast-util-to-babel-ast@^6.3.1":
- version "6.3.1"
- resolved "https://registry.yarnpkg.com/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-6.3.1.tgz#59614e24d2a4a28010e02089213b3448d905769d"
- integrity sha512-NgyCbiTQIwe3wHe/VWOUjyxmpUmsrBjdoIxKpXt3Nqc3TN30BpJG22OxBvVzsAh9jqep0w0/h8Ywvdk3D9niNQ==
+"@svgr/hast-util-to-babel-ast@^6.5.1":
+ version "6.5.1"
+ resolved "https://registry.yarnpkg.com/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-6.5.1.tgz#81800bd09b5bcdb968bf6ee7c863d2288fdb80d2"
+ integrity sha512-1hnUxxjd83EAxbL4a0JDJoD3Dao3hmjvyvyEV8PzWmLK3B9m9NPlW7GKjFyoWE8nM7HnXzPcmmSyOW8yOddSXw==
dependencies:
- "@babel/types" "^7.18.4"
- entities "^4.3.0"
+ "@babel/types" "^7.20.0"
+ entities "^4.4.0"
-"@svgr/plugin-jsx@^6.3.1":
- version "6.3.1"
- resolved "https://registry.yarnpkg.com/@svgr/plugin-jsx/-/plugin-jsx-6.3.1.tgz#de7b2de824296b836d6b874d498377896e367f50"
- integrity sha512-r9+0mYG3hD4nNtUgsTXWGYJomv/bNd7kC16zvsM70I/bGeoCi/3lhTmYqeN6ChWX317OtQCSZZbH4wq9WwoXbw==
+"@svgr/plugin-jsx@^6.5.1":
+ version "6.5.1"
+ resolved "https://registry.yarnpkg.com/@svgr/plugin-jsx/-/plugin-jsx-6.5.1.tgz#0e30d1878e771ca753c94e69581c7971542a7072"
+ integrity sha512-+UdQxI3jgtSjCykNSlEMuy1jSRQlGC7pqBCPvkG/2dATdWo082zHTTK3uhnAju2/6XpE6B5mZ3z4Z8Ns01S8Gw==
dependencies:
- "@babel/core" "^7.18.5"
- "@svgr/babel-preset" "^6.3.1"
- "@svgr/hast-util-to-babel-ast" "^6.3.1"
+ "@babel/core" "^7.19.6"
+ "@svgr/babel-preset" "^6.5.1"
+ "@svgr/hast-util-to-babel-ast" "^6.5.1"
svg-parser "^2.0.4"
-"@svgr/plugin-svgo@^6.3.1":
- version "6.3.1"
- resolved "https://registry.yarnpkg.com/@svgr/plugin-svgo/-/plugin-svgo-6.3.1.tgz#3c1ff2efaed10e5c5d35a6cae7bacaedc18b5d4a"
- integrity sha512-yJIjTDKPYqzFVjmsbH5EdIwEsmKxjxdXSGJVLeUgwZOZPAkNQmD1v7LDbOdOKbR44FG8465Du+zWPdbYGnbMbw==
+"@svgr/plugin-svgo@^6.5.1":
+ version "6.5.1"
+ resolved "https://registry.yarnpkg.com/@svgr/plugin-svgo/-/plugin-svgo-6.5.1.tgz#0f91910e988fc0b842f88e0960c2862e022abe84"
+ integrity sha512-omvZKf8ixP9z6GWgwbtmP9qQMPX4ODXi+wzbVZgomNFsUIlHA1sf4fThdwTWSsZGgvGAG6yE+b/F5gWUkcZ/iQ==
dependencies:
cosmiconfig "^7.0.1"
deepmerge "^4.2.2"
svgo "^2.8.0"
"@svgr/webpack@^6.2.1":
- version "6.3.1"
- resolved "https://registry.yarnpkg.com/@svgr/webpack/-/webpack-6.3.1.tgz#001d03236ebb03bf47c0a4b92d5423e05095ebe6"
- integrity sha512-eODxwIUShLxSMaRjzJtrj9wg89D75JLczvWg9SaB5W+OtVTkiC1vdGd8+t+pf5fTlBOy4RRXAq7x1E3DUl3D0A==
+ version "6.5.1"
+ resolved "https://registry.yarnpkg.com/@svgr/webpack/-/webpack-6.5.1.tgz#ecf027814fc1cb2decc29dc92f39c3cf691e40e8"
+ integrity sha512-cQ/AsnBkXPkEK8cLbv4Dm7JGXq2XrumKnL1dRpJD9rIO2fTIlJI9a1uCciYG1F2aUsox/hJQyNGbt3soDxSRkA==
dependencies:
- "@babel/core" "^7.18.5"
- "@babel/plugin-transform-react-constant-elements" "^7.17.12"
- "@babel/preset-env" "^7.18.2"
- "@babel/preset-react" "^7.17.12"
- "@babel/preset-typescript" "^7.17.12"
- "@svgr/core" "^6.3.1"
- "@svgr/plugin-jsx" "^6.3.1"
- "@svgr/plugin-svgo" "^6.3.1"
+ "@babel/core" "^7.19.6"
+ "@babel/plugin-transform-react-constant-elements" "^7.18.12"
+ "@babel/preset-env" "^7.19.4"
+ "@babel/preset-react" "^7.18.6"
+ "@babel/preset-typescript" "^7.18.6"
+ "@svgr/core" "^6.5.1"
+ "@svgr/plugin-jsx" "^6.5.1"
+ "@svgr/plugin-svgo" "^6.5.1"
-"@swc/helpers@0.4.3":
- version "0.4.3"
- resolved "https://registry.npmjs.org/@swc/helpers/-/helpers-0.4.3.tgz"
- integrity sha512-6JrF+fdUK2zbGpJIlN7G3v966PQjyx/dPt1T9km2wj+EUBqgrxCk3uX4Kct16MIm9gGxfKRcfax2hVf5jvlTzA==
+"@swc/helpers@0.4.11":
+ version "0.4.11"
+ resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.4.11.tgz#db23a376761b3d31c26502122f349a21b592c8de"
+ integrity sha512-rEUrBSGIoSFuYxwBYtlUFMlE2CwGhmW+w9355/5oduSw8e5h2+Tj4UrAGNNgP9915++wj5vkQo0UuOBqOAq4nw==
dependencies:
tslib "^2.4.0"
+"@tanstack/query-core@4.19.0":
+ version "4.19.0"
+ resolved "https://registry.yarnpkg.com/@tanstack/query-core/-/query-core-4.19.0.tgz#be1ad7bfbc4edb68e21ab2a86dd4c52233a40c87"
+ integrity sha512-q+4GvS05nG2UXDE4ng0NU5SQNhT+VqhRTLNVtgVw1tIKJfG3CyYQpP/JwAdzMB7NEqC8L5oo9NAaORxEQN53dg==
+
+"@tanstack/react-query@^4.16.1":
+ version "4.19.0"
+ resolved "https://registry.yarnpkg.com/@tanstack/react-query/-/react-query-4.19.0.tgz#353169522ff2e6dcfcc36c95ba4c151974a7ec92"
+ integrity sha512-gP4kmfQ3BvCYxTxA/3Xf0P24iNgW539Thk89KzP7X+i+EvFiWhEUMl1NtuI87bFrVEBHs+1ColFNimDidBh/Ww==
+ dependencies:
+ "@tanstack/query-core" "4.19.0"
+ use-sync-external-store "^1.2.0"
+
"@trysound/sax@0.2.0":
version "0.2.0"
resolved "https://registry.yarnpkg.com/@trysound/sax/-/sax-0.2.0.tgz#cccaab758af56761eb7bf37af6f03f326dd798ad"
@@ -1754,7 +2069,7 @@
"@types/hoist-non-react-statics@^3.3.0", "@types/hoist-non-react-statics@^3.3.1":
version "3.3.1"
- resolved "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz"
+ resolved "https://registry.yarnpkg.com/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz#1124aafe5118cb591977aeb1ceaaed1070eb039f"
integrity sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA==
dependencies:
"@types/react" "*"
@@ -1802,12 +2117,12 @@
"@types/prop-types@*":
version "15.7.5"
- resolved "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz"
+ resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.5.tgz#5f19d2b85a98e9558036f6a3cacc8819420f05cf"
integrity sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==
"@types/react-redux@^7.1.20":
version "7.1.24"
- resolved "https://registry.npmjs.org/@types/react-redux/-/react-redux-7.1.24.tgz"
+ resolved "https://registry.yarnpkg.com/@types/react-redux/-/react-redux-7.1.24.tgz#6caaff1603aba17b27d20f8ad073e4c077e975c0"
integrity sha512-7FkurKcS1k0FHZEtdbbgN8Oc6b+stGSfZYjQGicofJ0j4U0qIn/jaSvnP2pLwZKiai3/17xqqxkkrxTgN8UNbQ==
dependencies:
"@types/hoist-non-react-statics" "^3.3.0"
@@ -1815,7 +2130,16 @@
hoist-non-react-statics "^3.3.0"
redux "^4.0.0"
-"@types/react@*", "@types/react@16 || 17 || 18":
+"@types/react@*":
+ version "18.0.25"
+ resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.25.tgz#8b1dcd7e56fe7315535a4af25435e0bb55c8ae44"
+ integrity sha512-xD6c0KDT4m7n9uD4ZHi02lzskaiqcBxf4zi+tXZY98a04wvc0hi/TcCPC2FOESZi51Nd7tlUeOJY8RofL799/g==
+ dependencies:
+ "@types/prop-types" "*"
+ "@types/scheduler" "*"
+ csstype "^3.0.2"
+
+"@types/react@16 || 17 || 18":
version "18.0.10"
resolved "https://registry.npmjs.org/@types/react/-/react-18.0.10.tgz"
integrity sha512-dIugadZuIPrRzvIEevIu7A1smqOAjkSMv8qOfwPt9Ve6i6JT/FQcCHyk2qIAxwsQNKZt5/oGR0T4z9h2dXRAkg==
@@ -1826,7 +2150,7 @@
"@types/scheduler@*":
version "0.16.2"
- resolved "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz"
+ resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.2.tgz#1a62f89525723dde24ba1b01b092bf5df8ad4d39"
integrity sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==
"@types/schema-utils@^2.4.0":
@@ -1837,49 +2161,54 @@
schema-utils "*"
"@typescript-eslint/parser@^5.21.0":
- version "5.35.1"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.35.1.tgz#bf2ee2ebeaa0a0567213748243fb4eec2857f04f"
- integrity sha512-XL2TBTSrh3yWAsMYpKseBYTVpvudNf69rPOWXWVBI08My2JVT5jR66eTt4IgQFHA/giiKJW5dUD4x/ZviCKyGg==
+ version "5.45.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.45.0.tgz#b18a5f6b3cf1c2b3e399e9d2df4be40d6b0ddd0e"
+ integrity sha512-brvs/WSM4fKUmF5Ot/gEve6qYiCMjm6w4HkHPfS6ZNmxTS0m0iNN4yOChImaCkqc1hRwFGqUyanMXuGal6oyyQ==
dependencies:
- "@typescript-eslint/scope-manager" "5.35.1"
- "@typescript-eslint/types" "5.35.1"
- "@typescript-eslint/typescript-estree" "5.35.1"
+ "@typescript-eslint/scope-manager" "5.45.0"
+ "@typescript-eslint/types" "5.45.0"
+ "@typescript-eslint/typescript-estree" "5.45.0"
debug "^4.3.4"
-"@typescript-eslint/scope-manager@5.35.1":
- version "5.35.1"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.35.1.tgz#ccb69d54b7fd0f2d0226a11a75a8f311f525ff9e"
- integrity sha512-kCYRSAzIW9ByEIzmzGHE50NGAvAP3wFTaZevgWva7GpquDyFPFcmvVkFJGWJJktg/hLwmys/FZwqM9EKr2u24Q==
+"@typescript-eslint/scope-manager@5.45.0":
+ version "5.45.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.45.0.tgz#7a4ac1bfa9544bff3f620ab85947945938319a96"
+ integrity sha512-noDMjr87Arp/PuVrtvN3dXiJstQR1+XlQ4R1EvzG+NMgXi8CuMCXpb8JqNtFHKceVSQ985BZhfRdowJzbv4yKw==
dependencies:
- "@typescript-eslint/types" "5.35.1"
- "@typescript-eslint/visitor-keys" "5.35.1"
+ "@typescript-eslint/types" "5.45.0"
+ "@typescript-eslint/visitor-keys" "5.45.0"
-"@typescript-eslint/types@5.35.1":
- version "5.35.1"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.35.1.tgz#af355fe52a0cc88301e889bc4ada72f279b63d61"
- integrity sha512-FDaujtsH07VHzG0gQ6NDkVVhi1+rhq0qEvzHdJAQjysN+LHDCKDKCBRlZFFE0ec0jKxiv0hN63SNfExy0KrbQQ==
+"@typescript-eslint/types@5.45.0":
+ version "5.45.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.45.0.tgz#794760b9037ee4154c09549ef5a96599621109c5"
+ integrity sha512-QQij+u/vgskA66azc9dCmx+rev79PzX8uDHpsqSjEFtfF2gBUTRCpvYMh2gw2ghkJabNkPlSUCimsyBEQZd1DA==
-"@typescript-eslint/typescript-estree@5.35.1":
- version "5.35.1"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.35.1.tgz#db878a39a0dbdc9bb133f11cdad451770bfba211"
- integrity sha512-JUqE1+VRTGyoXlDWWjm6MdfpBYVq+hixytrv1oyjYIBEOZhBCwtpp5ZSvBt4wIA1MKWlnaC2UXl2XmYGC3BoQA==
+"@typescript-eslint/typescript-estree@5.45.0":
+ version "5.45.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.45.0.tgz#f70a0d646d7f38c0dfd6936a5e171a77f1e5291d"
+ integrity sha512-maRhLGSzqUpFcZgXxg1qc/+H0bT36lHK4APhp0AEUVrpSwXiRAomm/JGjSG+kNUio5kAa3uekCYu/47cnGn5EQ==
dependencies:
- "@typescript-eslint/types" "5.35.1"
- "@typescript-eslint/visitor-keys" "5.35.1"
+ "@typescript-eslint/types" "5.45.0"
+ "@typescript-eslint/visitor-keys" "5.45.0"
debug "^4.3.4"
globby "^11.1.0"
is-glob "^4.0.3"
semver "^7.3.7"
tsutils "^3.21.0"
-"@typescript-eslint/visitor-keys@5.35.1":
- version "5.35.1"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.35.1.tgz#285e9e34aed7c876f16ff646a3984010035898e6"
- integrity sha512-cEB1DvBVo1bxbW/S5axbGPE6b7FIMAbo3w+AGq6zNDA7+NYJOIkKj/sInfTv4edxd4PxJSgdN4t6/pbvgA+n5g==
+"@typescript-eslint/visitor-keys@5.45.0":
+ version "5.45.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.45.0.tgz#e0d160e9e7fdb7f8da697a5b78e7a14a22a70528"
+ integrity sha512-jc6Eccbn2RtQPr1s7th6jJWQHBHI6GBVQkCHoJFQ5UreaKm59Vxw+ynQUPPY2u2Amquc+7tmEoC2G52ApsGNNg==
dependencies:
- "@typescript-eslint/types" "5.35.1"
+ "@typescript-eslint/types" "5.45.0"
eslint-visitor-keys "^3.3.0"
+"@vercel/node-bridge@^2.1.0":
+ version "2.2.2"
+ resolved "https://registry.yarnpkg.com/@vercel/node-bridge/-/node-bridge-2.2.2.tgz#f63466ab6a2588afdc6262c2d060289bfe8baa6b"
+ integrity sha512-haGBC8noyA5BfjCRXRH+VIkHCDVW5iD5UX24P2nOdilwUxI4qWsattS/co8QBGq64XsNLRAMdM5pQUE3zxkF9Q==
+
"@vue/compiler-core@3.2.36", "@vue/compiler-core@^3.2.23":
version "3.2.36"
resolved "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.2.36.tgz"
@@ -1972,7 +2301,7 @@
JSONStream@1.3.4:
version "1.3.4"
- resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.4.tgz#615bb2adb0cd34c8f4c447b5f6512fa1d8f16a2e"
+ resolved "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.4.tgz"
integrity sha512-Y7vfi3I5oMOYIr+WxV8NZxDSwcbNgzdKYsTNInmycOq9bUYwGg9ryu57Wg5NLmCjqdFPNUmpMBo3kSJN9tCbXg==
dependencies:
jsonparse "^1.2.0"
@@ -2032,7 +2361,7 @@ ajv-keywords@^5.0.0:
ajv@^6.10.0, ajv@^6.12.3, ajv@^6.12.4:
version "6.12.6"
- resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"
+ resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz"
integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
dependencies:
fast-deep-equal "^3.1.1"
@@ -2051,9 +2380,9 @@ ajv@^8.0.0, ajv@^8.8.0:
uri-js "^4.2.2"
ajv@^8.0.1:
- version "8.11.0"
- resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.11.0.tgz#977e91dd96ca669f54a11e23e378e33b884a565f"
- integrity sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==
+ version "8.11.2"
+ resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.11.2.tgz#aecb20b50607acf2569b6382167b65a96008bb78"
+ integrity sha512-E4bfmKAhGiSTvMfL1Myyycaub+cUEU2/IvpylXkUu7CHBkBj1f/ikdzbD7YQ6FKUbixDxeYvB/xY4fvyroDlQg==
dependencies:
fast-deep-equal "^3.1.1"
json-schema-traverse "^1.0.0"
@@ -2086,11 +2415,24 @@ ansi-styles@^3.2.1:
ansi-styles@^4.0.0, ansi-styles@^4.1.0:
version "4.3.0"
- resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz"
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937"
integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==
dependencies:
color-convert "^2.0.1"
+anymatch@^3.1.2, 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"
+
+arch@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/arch/-/arch-2.2.0.tgz#1bc47818f305764f23ab3306b0bfc086c5a29d11"
+ integrity sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==
+
argparse@^1.0.7:
version "1.0.10"
resolved "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz"
@@ -2111,9 +2453,9 @@ 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, array-includes@^3.1.5:
+array-includes@^3.1.4:
version "3.1.5"
- resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.5.tgz#2c320010db8d31031fd2a5f6b3bbd4b1aad31bdb"
+ resolved "https://registry.npmjs.org/array-includes/-/array-includes-3.1.5.tgz"
integrity sha512-iSDYZMMyTPkiFasVqfuAQnWAYcvO/SeBSCGKePoEthjp4LEMTe4uLc7b025o4jAZpHhihh8xPo99TNWUWWkGDQ==
dependencies:
call-bind "^1.0.2"
@@ -2122,6 +2464,17 @@ array-includes@^3.1.4, array-includes@^3.1.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"
+ integrity sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==
+ dependencies:
+ call-bind "^1.0.2"
+ define-properties "^1.1.4"
+ es-abstract "^1.20.4"
+ get-intrinsic "^1.1.3"
+ is-string "^1.0.7"
+
array-union@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d"
@@ -2129,7 +2482,7 @@ array-union@^2.1.0:
array.prototype.flat@^1.2.5:
version "1.3.0"
- resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.0.tgz#0b0c1567bf57b38b56b4c97b8aa72ab45e4adc7b"
+ resolved "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.0.tgz"
integrity sha512-12IUEkHsAhA4DY5s0FPgNXIdc8VRSqD9Zp78a5au9abH/SOBrsp082JOWFNTjkMozh8mqcdiKuaLGhPeYztxSw==
dependencies:
call-bind "^1.0.2"
@@ -2137,16 +2490,27 @@ array.prototype.flat@^1.2.5:
es-abstract "^1.19.2"
es-shim-unscopables "^1.0.0"
-array.prototype.flatmap@^1.3.0:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.0.tgz#a7e8ed4225f4788a70cd910abcf0791e76a5534f"
- integrity sha512-PZC9/8TKAIxcWKdyeb77EzULHPrIX/tIZebLJUQOMR1OwYosT8yggdfWScfTBCDj5utONvOuPQQumYsU2ULbkg==
+array.prototype.flatmap@^1.3.1:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz#1aae7903c2100433cb8261cd4ed310aab5c4a183"
+ integrity sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==
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.tosorted@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz#ccf44738aa2b5ac56578ffda97c03fd3e23dd532"
+ integrity sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==
+ dependencies:
+ call-bind "^1.0.2"
+ define-properties "^1.1.4"
+ es-abstract "^1.20.4"
+ es-shim-unscopables "^1.0.0"
+ get-intrinsic "^1.1.3"
+
arrify@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d"
@@ -2154,14 +2518,14 @@ arrify@^1.0.1:
asn1@~0.2.3:
version "0.2.6"
- resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.6.tgz#0d3a7bb6e64e02a90c0303b31f292868ea09a08d"
+ resolved "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz"
integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==
dependencies:
safer-buffer "~2.1.0"
assert-plus@1.0.0, assert-plus@^1.0.0:
version "1.0.0"
- resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"
+ resolved "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz"
integrity sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==
ast-types-flow@^0.0.7:
@@ -2176,7 +2540,7 @@ astral-regex@^2.0.0:
asynckit@^0.4.0:
version "0.4.0"
- resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
+ resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz"
integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==
at-least-node@^1.0.0:
@@ -2198,54 +2562,47 @@ autoprefixer@^10.4.4:
aws-sign2@~0.7.0:
version "0.7.0"
- resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8"
+ resolved "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz"
integrity sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==
aws4@^1.8.0:
version "1.11.0"
- resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59"
+ resolved "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz"
integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==
axe-core@^4.4.3:
- version "4.4.3"
- resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.4.3.tgz#11c74d23d5013c0fa5d183796729bc3482bd2f6f"
- integrity sha512-32+ub6kkdhhWick/UjvEwRchgoetXqTK14INLqbGm5U2TzBkBNF3nQtLYm8ovxSkQWArjEQvftCKryjZaATu3w==
+ version "4.5.2"
+ resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.5.2.tgz#823fdf491ff717ac3c58a52631d4206930c1d9f7"
+ integrity sha512-u2MVsXfew5HBvjsczCv+xlwdNnB1oQR9HlAcsejZttNjKKSkeDNVwB1vMThIUIFI9GoT57Vtk8iQLwqOfAkboA==
axobject-query@^2.2.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.2.0.tgz#943d47e10c0b704aa42275e20edf3722648989be"
integrity sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==
-babel-plugin-dynamic-import-node@^2.3.3:
- version "2.3.3"
- resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3"
- integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==
- dependencies:
- object.assign "^4.1.0"
-
-babel-plugin-polyfill-corejs2@^0.3.2:
- version "0.3.2"
- resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.2.tgz#e4c31d4c89b56f3cf85b92558954c66b54bd972d"
- integrity sha512-LPnodUl3lS0/4wN3Rb+m+UK8s7lj2jcLRrjho4gLw+OJs+I4bvGXshINesY5xx/apM+biTnQ9reDI8yj+0M5+Q==
+babel-plugin-polyfill-corejs2@^0.3.3:
+ version "0.3.3"
+ resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz#5d1bd3836d0a19e1b84bbf2d9640ccb6f951c122"
+ integrity sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==
dependencies:
"@babel/compat-data" "^7.17.7"
- "@babel/helper-define-polyfill-provider" "^0.3.2"
+ "@babel/helper-define-polyfill-provider" "^0.3.3"
semver "^6.1.1"
-babel-plugin-polyfill-corejs3@^0.5.3:
- version "0.5.3"
- resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.3.tgz#d7e09c9a899079d71a8b670c6181af56ec19c5c7"
- integrity sha512-zKsXDh0XjnrUEW0mxIHLfjBfnXSMr5Q/goMe/fxpQnLm07mcOZiIZHBNWCMx60HmdvjxfXcalac0tfFg0wqxyw==
+babel-plugin-polyfill-corejs3@^0.6.0:
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz#56ad88237137eade485a71b52f72dbed57c6230a"
+ integrity sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==
dependencies:
- "@babel/helper-define-polyfill-provider" "^0.3.2"
- core-js-compat "^3.21.0"
+ "@babel/helper-define-polyfill-provider" "^0.3.3"
+ core-js-compat "^3.25.1"
-babel-plugin-polyfill-regenerator@^0.4.0:
- version "0.4.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.0.tgz#8f51809b6d5883e07e71548d75966ff7635527fe"
- integrity sha512-RW1cnryiADFeHmfLS+WW/G431p1PsW5qdRdz0SDRi7TKcUgc7Oh/uXkT7MZ/+tGsT1BkczEAmD5XjUyJ5SWDTw==
+babel-plugin-polyfill-regenerator@^0.4.1:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz#390f91c38d90473592ed43351e801a9d3e0fd747"
+ integrity sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==
dependencies:
- "@babel/helper-define-polyfill-provider" "^0.3.2"
+ "@babel/helper-define-polyfill-provider" "^0.3.3"
babel-plugin-react-intl@^7.0.0:
version "7.9.4"
@@ -2273,17 +2630,41 @@ balanced-match@^2.0.0:
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-2.0.0.tgz#dc70f920d78db8b858535795867bf48f820633d9"
integrity sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==
+base-x@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/base-x/-/base-x-4.0.0.tgz#d0e3b7753450c73f8ad2389b5c018a4af7b2224a"
+ integrity sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw==
+
+base64-js@^1.3.1:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a"
+ integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==
+
bcrypt-pbkdf@^1.0.0:
version "1.0.2"
- resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e"
+ resolved "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz"
integrity sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==
dependencies:
tweetnacl "^0.14.3"
bcryptjs@^2.4.3:
version "2.4.3"
- resolved "https://registry.npmjs.org/bcryptjs/-/bcryptjs-2.4.3.tgz"
- integrity sha1-mrVie5PmBiH/fNrF2pczAn3x0Ms=
+ resolved "https://registry.yarnpkg.com/bcryptjs/-/bcryptjs-2.4.3.tgz#9ab5627b93e60621ff7cdac5da9733027df1d0cb"
+ integrity sha512-V/Hy/X9Vt7f3BbPJEi8BdVFMByHi+jNXrYkW3huaybV/kQ0KJg0Y6PkEMbn+zeT+i+SiKZ/HMqJGIIt4LZDqNQ==
+
+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==
+
+bl@^4.0.3:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a"
+ integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==
+ dependencies:
+ buffer "^5.5.0"
+ inherits "^2.0.4"
+ readable-stream "^3.4.0"
boolbase@^1.0.0:
version "1.0.0"
@@ -2298,33 +2679,22 @@ 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.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
dependencies:
fill-range "^7.0.1"
-browserslist@^4.20.2, browserslist@^4.21.3:
- version "4.21.3"
- resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.3.tgz#5df277694eb3c48bc5c4b05af3e8b7e09c5a6d1a"
- integrity sha512-898rgRXLAyRkM1GryrrBHGkqA5hlpkV5MhtZwg9QXeiyLUYs2k00Un05aX5l2/yJIOObYKOpS2JNo8nJDE7fWQ==
+browserslist@^4.20.2, browserslist@^4.20.3, browserslist@^4.21.3, browserslist@^4.21.4:
+ version "4.21.4"
+ resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.4.tgz#e7496bbc67b9e39dd0f98565feccdcb0d4ff6987"
+ integrity sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==
dependencies:
- caniuse-lite "^1.0.30001370"
- electron-to-chromium "^1.4.202"
+ caniuse-lite "^1.0.30001400"
+ electron-to-chromium "^1.4.251"
node-releases "^2.0.6"
- update-browserslist-db "^1.0.5"
-
-browserslist@^4.20.3:
- version "4.20.3"
- resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.20.3.tgz"
- integrity sha512-NBhymBQl1zM0Y5dQT/O+xiLP9/rzOIQdKM/eMJBAq7yBgaB6krIYLGejrwVYnSHZdqjscB1SPuAjHwxjvN6Wdg==
- dependencies:
- caniuse-lite "^1.0.30001332"
- electron-to-chromium "^1.4.118"
- escalade "^3.1.1"
- node-releases "^2.0.3"
- picocolors "^1.0.0"
+ update-browserslist-db "^1.0.9"
buble@^0.20.0:
version "0.20.0"
@@ -2349,6 +2719,21 @@ buffer-from@^1.0.0:
resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz"
integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==
+buffer@^5.5.0:
+ version "5.7.1"
+ resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0"
+ integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==
+ dependencies:
+ base64-js "^1.3.1"
+ ieee754 "^1.1.13"
+
+busboy@^1.6.0:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/busboy/-/busboy-1.6.0.tgz#966ea36a9502e43cdb9146962523b92f531f6893"
+ integrity sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==
+ dependencies:
+ streamsearch "^1.1.0"
+
call-bind@^1.0.0, call-bind@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c"
@@ -2381,19 +2766,24 @@ camelcase@^6.2.0:
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a"
integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==
-caniuse-lite@^1.0.30001332, caniuse-lite@^1.0.30001335:
- version "1.0.30001356"
- resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001356.tgz"
- integrity sha512-/30854bktMLhxtjieIxsrJBfs2gTM1pel6MXKF3K+RdIVJZcsn2A2QdhsuR4/p9+R204fZw0zCBBhktX8xWuyQ==
+caniuse-lite@^1.0.30001335:
+ version "1.0.30001418"
+ resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001418.tgz"
+ integrity sha512-oIs7+JL3K9JRQ3jPZjlH6qyYDp+nBTCais7hjh0s+fuBwufc7uZ7hPYMXrDOJhV360KGMTcczMRObk0/iMqZRg==
-caniuse-lite@^1.0.30001370:
- version "1.0.30001383"
- resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001383.tgz#aecf317ccd940690725ae3ae4f28293c5fb8050e"
- integrity sha512-swMpEoTp5vDoGBZsYZX7L7nXHe6dsHxi9o6/LKf/f0LukVtnrxly5GVb/fWdCDTqi/yw6Km6tiJ0pmBacm0gbg==
+caniuse-lite@^1.0.30001400:
+ version "1.0.30001427"
+ resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001427.tgz#d3a749f74be7ae0671fbec3a4eea18576e8ad646"
+ integrity sha512-lfXQ73oB9c8DP5Suxaszm+Ta2sr/4tf8+381GkIm1MLj/YdLf+rEDyDSRCzeltuyTVGm+/s18gdZ0q+Wmp8VsQ==
+
+caniuse-lite@^1.0.30001406:
+ version "1.0.30001435"
+ resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001435.tgz#502c93dbd2f493bee73a408fe98e98fb1dad10b2"
+ integrity sha512-kdCkUTjR+v4YAJelyiDTqiu82BDr4W4CP5sgTA0ZBmqn30XfS2ZghPLMowik9TPhS+psWJiUNxsqLyurDbmutA==
caseless@~0.12.0:
version "0.12.0"
- resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
+ resolved "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz"
integrity sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==
chalk@^2.0.0, chalk@^2.4.1, chalk@^2.4.2:
@@ -2405,7 +2795,7 @@ chalk@^2.0.0, chalk@^2.4.1, chalk@^2.4.2:
escape-string-regexp "^1.0.5"
supports-color "^5.3.0"
-chalk@^4.0.0, chalk@^4.1.1:
+chalk@^4.0.0, chalk@^4.1.1, chalk@^4.1.2:
version "4.1.2"
resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz"
integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==
@@ -2436,9 +2826,29 @@ chartjs-color@^2.1.0:
chartjs-color-string "^0.6.0"
color-convert "^1.9.3"
+chokidar@^3.5.3:
+ 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"
+
+chownr@^1.1.1:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b"
+ integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==
+
chownr@^2.0.0:
version "2.0.0"
- resolved "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz"
+ resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece"
integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==
ci-info@^3.2.0:
@@ -2447,9 +2857,9 @@ ci-info@^3.2.0:
integrity sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw==
classnames@^2.3.1:
- version "2.3.1"
- resolved "https://registry.npmjs.org/classnames/-/classnames-2.3.1.tgz"
- integrity sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA==
+ version "2.3.2"
+ resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.3.2.tgz#351d813bf0137fcc6a76a16b88208d2560a0d924"
+ integrity sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw==
clean-stack@^2.0.0:
version "2.2.0"
@@ -2473,7 +2883,7 @@ cli-truncate@2.1.0, cli-truncate@^2.1.0:
clickhouse@^2.5.0:
version "2.6.0"
- resolved "https://registry.yarnpkg.com/clickhouse/-/clickhouse-2.6.0.tgz#6218e3978fd5f343bdff395d988c5cd44e8b9a03"
+ resolved "https://registry.npmjs.org/clickhouse/-/clickhouse-2.6.0.tgz"
integrity sha512-HC5OV99GJOup4qZsTuWWPpXlj+847Z0OeygDU2x22rNYost0V/vWapzFWYZdV/5iRbGMrhFQPOyQEzmGvoaWRQ==
dependencies:
JSONStream "1.3.4"
@@ -2485,9 +2895,23 @@ clickhouse@^2.5.0:
tsv "0.2.0"
uuid "3.4.0"
+clipboardy@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/clipboardy/-/clipboardy-3.0.0.tgz#f3876247404d334c9ed01b6f269c11d09a5e3092"
+ integrity sha512-Su+uU5sr1jkUy1sGRpLKjKrvEOVXgSgiSInwa/qeID6aJ07yh+5NWc3h2QfjHjBnfX4LhtFcuAWKUsJ3r+fjbg==
+ dependencies:
+ arch "^2.2.0"
+ execa "^5.1.1"
+ is-wsl "^2.2.0"
+
+cluster-key-slot@1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/cluster-key-slot/-/cluster-key-slot-1.1.1.tgz#10ccb9ded0729464b6d2e7d714b100a2d1259d43"
+ integrity sha512-rwHwUfXL40Chm1r08yrhU3qpUvdVlgkKNeyeGPOxnW8/SyVDvgRaed/Uz54AqWNaTCAThlj6QAs3TZcKI0xDEw==
+
cluster-key-slot@^1.1.0:
version "1.1.0"
- resolved "https://registry.yarnpkg.com/cluster-key-slot/-/cluster-key-slot-1.1.0.tgz#30474b2a981fb12172695833052bc0d01336d10d"
+ resolved "https://registry.npmjs.org/cluster-key-slot/-/cluster-key-slot-1.1.0.tgz"
integrity sha512-2Nii8p3RwAPiFwsnZvukotvow2rIHM+yQ6ZcBXGHdniadkYGZYiGmkHJIbZPIV9nfv7m/U1IPMVVcAhoWFeklw==
color-convert@^1.9.0, color-convert@^1.9.3:
@@ -2514,9 +2938,25 @@ color-name@^1.0.0, color-name@~1.1.4:
resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
+color-string@^1.9.0:
+ version "1.9.1"
+ resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.9.1.tgz#4467f9146f036f855b764dfb5bf8582bf342c7a4"
+ integrity sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==
+ dependencies:
+ color-name "^1.0.0"
+ simple-swizzle "^0.2.2"
+
+color@^4.2.3:
+ version "4.2.3"
+ resolved "https://registry.yarnpkg.com/color/-/color-4.2.3.tgz#d781ecb5e57224ee43ea9627560107c0e0c6463a"
+ integrity sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==
+ dependencies:
+ color-convert "^2.0.1"
+ color-string "^1.9.0"
+
colord@^2.9.2, colord@^2.9.3:
version "2.9.3"
- resolved "https://registry.yarnpkg.com/colord/-/colord-2.9.3.tgz#4f8ce919de456f1d5c1c368c307fe20f3e59fb43"
+ resolved "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz"
integrity sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==
colorette@^1.4.0:
@@ -2529,14 +2969,19 @@ colorette@^2.0.16:
resolved "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz"
integrity sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==
+colorette@^2.0.19:
+ version "2.0.19"
+ resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.19.tgz#cdf044f47ad41a0f4b56b3a0d5b4e6e1a2d5a798"
+ integrity sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==
+
combined-stream@^1.0.6, combined-stream@~1.0.6:
version "1.0.8"
- resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f"
+ resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz"
integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==
dependencies:
delayed-stream "~1.0.0"
-commander@2, commander@^2.20.0:
+commander@2, commander@^2.20.0, commander@^2.20.3:
version "2.20.3"
resolved "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz"
integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
@@ -2561,29 +3006,36 @@ concat-map@0.0.1:
resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==
+consola@^2.15.3:
+ version "2.15.3"
+ resolved "https://registry.yarnpkg.com/consola/-/consola-2.15.3.tgz#2e11f98d6a4be71ff72e0bdf07bd23e12cb61550"
+ integrity sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==
+
convert-source-map@^1.7.0:
- version "1.8.0"
- resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369"
- integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==
- dependencies:
- safe-buffer "~5.1.1"
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f"
+ integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==
-core-js-compat@^3.21.0, core-js-compat@^3.22.1:
- version "3.25.0"
- resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.25.0.tgz#489affbfbf9cb3fa56192fe2dd9ebaee985a66c5"
- integrity sha512-extKQM0g8/3GjFx9US12FAgx8KJawB7RCQ5y8ipYLbmfzEzmFRWdDjIlxDx82g7ygcNG85qMVUSRyABouELdow==
- dependencies:
- browserslist "^4.21.3"
- semver "7.0.0"
+cookie-es@^0.5.0:
+ version "0.5.0"
+ resolved "https://registry.yarnpkg.com/cookie-es/-/cookie-es-0.5.0.tgz#a6ad89923e68c542fc9e760b07aefa5ab020d719"
+ integrity sha512-RyZrFi6PNpBFbIaQjXDlFIhFVqV42QeKSZX1yQIl6ihImq6vcHNGMtqQ/QzY3RMPuYSkvsRwtnt5M9NeYxKt0g==
-core-js-pure@^3.20.2:
- version "3.25.0"
- resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.25.0.tgz#f8d1f176ff29abbfeb610110de891d5ae5a361d4"
- integrity sha512-IeHpLwk3uoci37yoI2Laty59+YqH9x5uR65/yiA0ARAJrTrN4YU0rmauLWfvqOuk77SlNJXj2rM6oT/dBD87+A==
+core-js-compat@^3.25.1:
+ version "3.26.0"
+ resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.26.0.tgz#94e2cf8ba3e63800c4956ea298a6473bc9d62b44"
+ integrity sha512-piOX9Go+Z4f9ZiBFLnZ5VrOpBl0h7IGCkiFUN11QTe6LjAvOT3ifL/5TdoizMh99hcGy5SoLyWbapIY/PIb/3A==
+ dependencies:
+ browserslist "^4.21.4"
+
+core-js-pure@^3.25.1:
+ version "3.26.1"
+ resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.26.1.tgz#653f4d7130c427820dcecd3168b594e8bb095a33"
+ integrity sha512-VVXcDpp/xJ21KdULRq/lXdLzQAtX7+37LzpyfFM973il0tWSsDEoyzG38G14AjTpK9VTfiNM9jnFauq/CpaWGQ==
core-util-is@1.0.2:
version "1.0.2"
- resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
+ resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz"
integrity sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==
cors@^2.8.5:
@@ -2594,10 +3046,10 @@ cors@^2.8.5:
object-assign "^4"
vary "^1"
-cosmiconfig@^7.0.1:
- version "7.0.1"
- resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.0.1.tgz#714d756522cace867867ccb4474c5d01bbae5d6d"
- integrity sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==
+cosmiconfig@^7.0.1, cosmiconfig@^7.1.0:
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.1.0.tgz#1443b9afa596b670082ea46cbd8f6a62b84635f6"
+ integrity sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==
dependencies:
"@types/parse-json" "^4.0.0"
import-fresh "^3.2.1"
@@ -2641,7 +3093,7 @@ css-blank-pseudo@^3.0.3:
css-box-model@^1.2.0:
version "1.2.1"
- resolved "https://registry.npmjs.org/css-box-model/-/css-box-model-1.2.1.tgz"
+ resolved "https://registry.yarnpkg.com/css-box-model/-/css-box-model-1.2.1.tgz#59951d3b81fd6b2074a62d49444415b0d2b4d7c1"
integrity sha512-a7Vr4Q/kd/aw96bnJG332W9V9LkJO69JRcaCYDUqjp6/z0w6VcZjgAcTbgFxEPfBgdnAwlh3iwu+hLopa+flJw==
dependencies:
tiny-invariant "^1.0.6"
@@ -2697,6 +3149,11 @@ cssesc@^3.0.0:
resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee"
integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==
+cssfilter@0.0.10:
+ version "0.0.10"
+ resolved "https://registry.yarnpkg.com/cssfilter/-/cssfilter-0.0.10.tgz#c6d2672632a2e5c83e013e6864a42ce8defd20ae"
+ integrity sha512-FAaLDaplstoRsDR8XGYH51znUN0UY7nMc6Z9/fvE8EXGwvJE9hu7W2vHwx1+bd6gCYnln9nLbzxFTrcO9YQDZw==
+
csso@^4.2.0:
version "4.2.0"
resolved "https://registry.yarnpkg.com/csso/-/csso-4.2.0.tgz#ea3a561346e8dc9f546d6febedd50187cf389529"
@@ -2710,9 +3167,9 @@ csstype@^2.6.8:
integrity sha512-/WwNkdXfckNgw6S5R125rrW8ez139lBHWouiBvX8dfMFtcn6V81REDqnH7+CRpRipfYlyU1CmOnOxrmGcFOjeA==
csstype@^3.0.2:
- version "3.1.0"
- resolved "https://registry.npmjs.org/csstype/-/csstype-3.1.0.tgz"
- integrity sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA==
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.1.tgz#841b532c45c758ee546a11d5bd7b7b473c8c30b9"
+ integrity sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==
currently-unhandled@^0.4.1:
version "0.4.1"
@@ -2804,25 +3261,25 @@ damerau-levenshtein@^1.0.8:
dashdash@^1.12.0:
version "1.14.1"
- resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"
+ resolved "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz"
integrity sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==
dependencies:
assert-plus "^1.0.0"
data-uri-to-buffer@^4.0.0:
version "4.0.0"
- resolved "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.0.tgz"
+ resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-4.0.0.tgz#b5db46aea50f6176428ac05b73be39a57701a64b"
integrity sha512-Vr3mLBA8qWmcuschSLAOogKgQ/Jwxulv3RNE4FXnYWRGujzrRWQI4m12fQqRkwX06C0KanhLr4hK+GydchZsaA==
date-fns-tz@^1.1.4:
- version "1.3.6"
- resolved "https://registry.npmjs.org/date-fns-tz/-/date-fns-tz-1.3.6.tgz"
- integrity sha512-C8q7mErvG4INw1ZwAFmPlGjEo5Sv4udjKVbTc03zpP9cu6cp5AemFzKhz0V68LGcWEtX5mJudzzg3G04emIxLA==
+ version "1.3.7"
+ resolved "https://registry.yarnpkg.com/date-fns-tz/-/date-fns-tz-1.3.7.tgz#e8e9d2aaceba5f1cc0e677631563081fdcb0e69a"
+ integrity sha512-1t1b8zyJo+UI8aR+g3iqr5fkUHWpd58VBx8J/ZSQ+w7YrGlw80Ag4sA86qkfCXRBLmMc4I2US+aPMd4uKvwj5g==
date-fns@^2.23.0:
- version "2.29.2"
- resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.29.2.tgz#0d4b3d0f3dff0f920820a070920f0d9662c51931"
- integrity sha512-0VNbwmWJDS/G3ySwFSJA3ayhbURMTJLtwM2DTxf9CWondCnh6DTNlO9JgRSq6ibf4eD0lfMJNBxUdEAHHix+bA==
+ version "2.29.3"
+ resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.29.3.tgz#27402d2fc67eb442b511b70bbdf98e6411cd68a8"
+ integrity sha512-dDCnyH2WnnKusqvZZ6+jA1O51Ibt8ZMRNkDZdyAyK4YfbDwa/cEmuztzG5pk6hqlp9aSBPYcjOlktquahGwGeA==
dateformat@^5.0.3:
version "5.0.3"
@@ -2836,7 +3293,7 @@ debounce@^1.2.1:
debug@^2.6.9:
version "2.6.9"
- resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
+ resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz"
integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
dependencies:
ms "2.0.0"
@@ -2857,15 +3314,15 @@ debug@^4.0.1:
debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4:
version "4.3.4"
- resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865"
+ resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz"
integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
dependencies:
ms "2.1.2"
decamelize-keys@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9"
- integrity sha512-ocLWuYzRPoS9bfiSdDd3cxvrzovVMZnRDVEzAs+hWIVXGDbHxWMECij2OBuyB/An0FFW/nLuq6Kv1i/YC5Qfzg==
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.1.tgz#04a2d523b2f18d80d0158a43b895d56dff8d19d8"
+ integrity sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==
dependencies:
decamelize "^1.1.0"
map-obj "^1.0.0"
@@ -2875,6 +3332,18 @@ decamelize@^1.1.0, decamelize@^1.2.0:
resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==
+decompress-response@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc"
+ integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==
+ dependencies:
+ mimic-response "^3.1.0"
+
+deep-extend@^0.6.0:
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac"
+ integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==
+
deep-is@^0.1.3:
version "0.1.4"
resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz"
@@ -2898,6 +3367,11 @@ 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:
+ version "6.1.1"
+ resolved "https://registry.yarnpkg.com/defu/-/defu-6.1.1.tgz#a12c712349197c545dc61d3cd3b607b4cc7ef0c1"
+ integrity sha512-aA964RUCsBt0FGoNIlA3uFgo2hO+WWC0fiC6DBps/0SFzkKcYoM/3CzVLIa5xSsrFjdioMdYgAIbwo80qp2MoA==
+
del@^6.0.0:
version "6.1.1"
resolved "https://registry.npmjs.org/del/-/del-6.1.1.tgz"
@@ -2914,14 +3388,19 @@ del@^6.0.0:
delayed-stream@~1.0.0:
version "1.0.0"
- resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
+ resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz"
integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==
denque@^2.0.1:
version "2.1.0"
- resolved "https://registry.yarnpkg.com/denque/-/denque-2.1.0.tgz#e93e1a6569fb5e66f16a3c2a2964617d349d6ab1"
+ resolved "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz"
integrity sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==
+destr@^1.1.1, destr@^1.2.0:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/destr/-/destr-1.2.1.tgz#03f2e7cbcd01f9190938d05718948de9d7dfb71a"
+ integrity sha512-ud8w0qMLlci6iFG7CNgeRr8OcbUWMsbfjtWft1eJ5Luqrz/M8Ebqk/KCzne8rKUlIQWWfLv0wD6QHrqOf4GshA==
+
detect-browser@^5.2.0:
version "5.3.0"
resolved "https://registry.npmjs.org/detect-browser/-/detect-browser-5.3.0.tgz"
@@ -2932,6 +3411,11 @@ detect-indent@^6.0.0:
resolved "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz"
integrity sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==
+detect-libc@^2.0.0, detect-libc@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.1.tgz#e1897aa88fa6ad197862937fbc0441ef352ee0cd"
+ integrity sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==
+
dir-glob@^3.0.1:
version "3.0.1"
resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f"
@@ -2990,7 +3474,7 @@ dotenv@^10.0.0:
ecc-jsbn@~0.1.1:
version "0.1.2"
- resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9"
+ resolved "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz"
integrity sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==
dependencies:
jsbn "~0.1.0"
@@ -3003,15 +3487,10 @@ ecdsa-sig-formatter@1.0.11:
dependencies:
safe-buffer "^5.0.1"
-electron-to-chromium@^1.4.118:
- version "1.4.143"
- resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.143.tgz"
- integrity sha512-2hIgvu0+pDfXIqmVmV5X6iwMjQ2KxDsWKwM+oI1fABEOy/Dqmll0QJRmIQ3rm+XaoUa/qKrmy5h7LSTFQ6Ldzg==
-
-electron-to-chromium@^1.4.202:
- version "1.4.233"
- resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.233.tgz#aa142e45468bda111b88abc9cc59d573b75d6a60"
- integrity sha512-ejwIKXTg1wqbmkcRJh9Ur3hFGHFDZDw1POzdsVrB2WZjgRuRMHIQQKNpe64N/qh3ZtH2otEoRoS+s6arAAuAAw==
+electron-to-chromium@^1.4.251:
+ version "1.4.284"
+ resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz#61046d1e4cab3a25238f6bf7413795270f125592"
+ integrity sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==
emoji-regex@^8.0.0:
version "8.0.0"
@@ -3023,6 +3502,13 @@ emoji-regex@^9.2.2:
resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72"
integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==
+end-of-stream@^1.1.0, end-of-stream@^1.4.1:
+ version "1.4.4"
+ resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0"
+ integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==
+ dependencies:
+ once "^1.4.0"
+
enquirer@^2.3.5, enquirer@^2.3.6:
version "2.3.6"
resolved "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz"
@@ -3035,10 +3521,10 @@ entities@^2.0.0:
resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55"
integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==
-entities@^4.3.0:
- version "4.3.1"
- resolved "https://registry.yarnpkg.com/entities/-/entities-4.3.1.tgz#c34062a94c865c322f9d67b4384e4169bcede6a4"
- integrity sha512-o4q/dYJlmyjP2zfnaWDUC6A3BQFmVTX+tZPezK7k0GLSU9QYCauscf5Y+qcEPzKL+EixVouYDgLQK5H9GrLpkg==
+entities@^4.4.0:
+ version "4.4.0"
+ resolved "https://registry.yarnpkg.com/entities/-/entities-4.4.0.tgz#97bdaba170339446495e653cfd2db78962900174"
+ integrity sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==
error-ex@^1.3.1:
version "1.3.2"
@@ -3047,31 +3533,32 @@ 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:
- version "1.20.1"
- resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.20.1.tgz#027292cd6ef44bd12b1913b828116f54787d1814"
- integrity sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==
+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:
+ 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==
dependencies:
call-bind "^1.0.2"
es-to-primitive "^1.2.1"
function-bind "^1.1.1"
function.prototype.name "^1.1.5"
- get-intrinsic "^1.1.1"
+ get-intrinsic "^1.1.3"
get-symbol-description "^1.0.0"
has "^1.0.3"
has-property-descriptors "^1.0.0"
has-symbols "^1.0.3"
internal-slot "^1.0.3"
- is-callable "^1.2.4"
+ is-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-weakref "^1.0.2"
- object-inspect "^1.12.0"
+ object-inspect "^1.12.2"
object-keys "^1.1.1"
- object.assign "^4.1.2"
+ object.assign "^4.1.4"
regexp.prototype.flags "^1.4.3"
+ safe-regex-test "^1.0.0"
string.prototype.trimend "^1.0.5"
string.prototype.trimstart "^1.0.5"
unbox-primitive "^1.0.2"
@@ -3108,18 +3595,18 @@ escape-string-regexp@^4.0.0:
integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==
eslint-config-next@^12.2.4:
- version "12.2.5"
- resolved "https://registry.yarnpkg.com/eslint-config-next/-/eslint-config-next-12.2.5.tgz#76ce83f18cc02f6f42ed407a127f83db54fabd3c"
- integrity sha512-SOowilkqPzW6DxKp3a3SYlrfPi5Ajs9MIzp9gVfUDxxH9QFM5ElkR1hX5m/iICJuvCbWgQqFBiA3mCMozluniw==
+ version "12.3.4"
+ resolved "https://registry.yarnpkg.com/eslint-config-next/-/eslint-config-next-12.3.4.tgz#3d4d9e74b919b879c4cc79c61bdc388fb2b964ee"
+ integrity sha512-WuT3gvgi7Bwz00AOmKGhOeqnyA5P29Cdyr0iVjLyfDbk+FANQKcOjFUTZIdyYfe5Tq1x4TGcmoe4CwctGvFjHQ==
dependencies:
- "@next/eslint-plugin-next" "12.2.5"
+ "@next/eslint-plugin-next" "12.3.4"
"@rushstack/eslint-patch" "^1.1.3"
"@typescript-eslint/parser" "^5.21.0"
eslint-import-resolver-node "^0.3.6"
eslint-import-resolver-typescript "^2.7.1"
eslint-plugin-import "^2.26.0"
eslint-plugin-jsx-a11y "^6.5.1"
- eslint-plugin-react "^7.29.4"
+ eslint-plugin-react "^7.31.7"
eslint-plugin-react-hooks "^4.5.0"
eslint-config-prettier@^8.5.0:
@@ -3129,7 +3616,7 @@ eslint-config-prettier@^8.5.0:
eslint-import-resolver-alias@^1.1.2:
version "1.1.2"
- resolved "https://registry.yarnpkg.com/eslint-import-resolver-alias/-/eslint-import-resolver-alias-1.1.2.tgz#297062890e31e4d6651eb5eba9534e1f6e68fc97"
+ 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:
@@ -3153,14 +3640,14 @@ eslint-import-resolver-typescript@^2.7.1:
eslint-module-utils@^2.7.3:
version "2.7.4"
- resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz#4f3e41116aaf13a20792261e61d3a2e7e0583974"
+ resolved "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz"
integrity sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==
dependencies:
debug "^3.2.7"
eslint-plugin-import@^2.26.0:
version "2.26.0"
- resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz#f812dc47be4f2b72b478a021605a59fc6fe8b88b"
+ resolved "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz"
integrity sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==
dependencies:
array-includes "^3.1.4"
@@ -3208,25 +3695,26 @@ eslint-plugin-react-hooks@^4.5.0:
resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz#4c3e697ad95b77e93f8646aaa1630c1ba607edd3"
integrity sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==
-eslint-plugin-react@^7.29.4:
- version "7.31.1"
- resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.31.1.tgz#d29793ed27743f3ed8a473c347b1bf5a0a8fb9af"
- integrity sha512-j4/2xWqt/R7AZzG8CakGHA6Xa/u7iR8Q3xCxY+AUghdT92bnIDOBEefV456OeH0QvBcroVc0eyvrrLSyQGYIfg==
+eslint-plugin-react@^7.31.7:
+ version "7.31.11"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.31.11.tgz#011521d2b16dcf95795df688a4770b4eaab364c8"
+ integrity sha512-TTvq5JsT5v56wPa9OYHzsrOlHzKZKjV+aLgS+55NJP/cuzdiQPC7PfYoUjMoxlffKtvijpk7vA/jmuqRb9nohw==
dependencies:
- array-includes "^3.1.5"
- array.prototype.flatmap "^1.3.0"
+ array-includes "^3.1.6"
+ array.prototype.flatmap "^1.3.1"
+ array.prototype.tosorted "^1.1.1"
doctrine "^2.1.0"
estraverse "^5.3.0"
jsx-ast-utils "^2.4.1 || ^3.0.0"
minimatch "^3.1.2"
- object.entries "^1.1.5"
- object.fromentries "^2.0.5"
- object.hasown "^1.1.1"
- object.values "^1.1.5"
+ object.entries "^1.1.6"
+ object.fromentries "^2.0.6"
+ object.hasown "^1.1.2"
+ object.values "^1.1.6"
prop-types "^15.8.1"
resolve "^2.0.0-next.3"
semver "^6.3.0"
- string.prototype.matchall "^4.0.7"
+ string.prototype.matchall "^4.0.8"
eslint-scope@^5.1.1:
version "5.1.1"
@@ -3357,9 +3845,14 @@ esutils@^2.0.2:
resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"
integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==
+etag@^1.8.1:
+ version "1.8.1"
+ resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887"
+ integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==
+
execa@^5.1.1:
version "5.1.1"
- resolved "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz"
+ resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd"
integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==
dependencies:
cross-spawn "^7.0.3"
@@ -3372,9 +3865,14 @@ execa@^5.1.1:
signal-exit "^3.0.3"
strip-final-newline "^2.0.0"
+expand-template@^2.0.3:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c"
+ integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==
+
extend@~3.0.2:
version "3.0.2"
- resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa"
+ resolved "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz"
integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==
extract-react-intl-messages@^4.1.1:
@@ -3400,12 +3898,12 @@ extract-react-intl-messages@^4.1.1:
extsprintf@1.3.0:
version "1.3.0"
- resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05"
+ resolved "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz"
integrity sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==
extsprintf@^1.2.0:
version "1.4.1"
- resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.1.tgz#8d172c064867f235c0c84a596806d279bf4bcc07"
+ resolved "https://registry.npmjs.org/extsprintf/-/extsprintf-1.4.1.tgz"
integrity sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA==
fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3:
@@ -3418,9 +3916,25 @@ fast-diff@^1.1.2:
resolved "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz"
integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==
-fast-glob@^3.2.11, fast-glob@^3.2.7, fast-glob@^3.2.9:
+fast-equals@^3.0.1:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/fast-equals/-/fast-equals-3.0.3.tgz#8e6cb4e51ca1018d87dd41982ef92758b3e4197f"
+ integrity sha512-NCe8qxnZFARSHGztGMZOO/PC1qa5MIFB5Hp66WdzbCRAz8U8US3bx1UTgLS49efBQPcUtO9gf5oVEY8o7y/7Kg==
+
+fast-glob@^3.2.12, fast-glob@^3.2.9:
+ version "3.2.12"
+ resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80"
+ integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==
+ dependencies:
+ "@nodelib/fs.stat" "^2.0.2"
+ "@nodelib/fs.walk" "^1.2.3"
+ glob-parent "^5.1.2"
+ merge2 "^1.3.0"
+ micromatch "^4.0.4"
+
+fast-glob@^3.2.7:
version "3.2.11"
- resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.11.tgz#a1172ad95ceb8a16e20caa5c5e56480e5129c1d9"
+ resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz"
integrity sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==
dependencies:
"@nodelib/fs.stat" "^2.0.2"
@@ -3431,7 +3945,7 @@ fast-glob@^3.2.11, fast-glob@^3.2.7, fast-glob@^3.2.9:
fast-json-stable-stringify@^2.0.0:
version "2.1.0"
- resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
+ resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz"
integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==
fast-levenshtein@^2.0.6:
@@ -3453,7 +3967,7 @@ fastq@^1.6.0:
fetch-blob@^3.1.2, fetch-blob@^3.1.4:
version "3.2.0"
- resolved "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz"
+ resolved "https://registry.yarnpkg.com/fetch-blob/-/fetch-blob-3.2.0.tgz#f09b8d4bbd45adc6f0c20b7e787e793e309dcce9"
integrity sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==
dependencies:
node-domexception "^1.0.0"
@@ -3483,7 +3997,7 @@ find-up@^4.1.0:
find-up@^5.0.0:
version "5.0.0"
- resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc"
+ resolved "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz"
integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==
dependencies:
locate-path "^6.0.0"
@@ -3507,14 +4021,19 @@ flatted@^3.1.0:
resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787"
integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==
+follow-redirects@^1.15.2:
+ version "1.15.2"
+ resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13"
+ integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==
+
forever-agent@~0.6.1:
version "0.6.1"
- resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
+ resolved "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz"
integrity sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==
form-data@~2.3.2:
version "2.3.3"
- resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6"
+ resolved "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz"
integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==
dependencies:
asynckit "^0.4.0"
@@ -3523,7 +4042,7 @@ form-data@~2.3.2:
formdata-polyfill@^4.0.10:
version "4.0.10"
- resolved "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz"
+ resolved "https://registry.yarnpkg.com/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz#24807c31c9d402e002ab3d8c720144ceb8848423"
integrity sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==
dependencies:
fetch-blob "^3.1.2"
@@ -3546,7 +4065,12 @@ fraction.js@^4.2.0:
resolved "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz"
integrity sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==
-fs-extra@10, fs-extra@^10.0.1:
+fs-constants@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad"
+ integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==
+
+fs-extra@10, fs-extra@^10.0.0, fs-extra@^10.0.1:
version "10.1.0"
resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz"
integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==
@@ -3565,9 +4089,14 @@ fs-extra@^9.0.0:
jsonfile "^6.0.1"
universalify "^2.0.0"
+fs-memo@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/fs-memo/-/fs-memo-1.2.0.tgz#a2ec3be606b902077adbb37ec529c5ec5fb2e037"
+ integrity sha512-YEexkCpL4j03jn5SxaMHqcO6IuWuqm8JFUYhyCep7Ao89JIYmB8xoKhK7zXXJ9cCaNXpyNH5L3QtAmoxjoHW2w==
+
fs-minipass@^2.0.0:
version "2.1.0"
- resolved "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz"
+ resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb"
integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==
dependencies:
minipass "^3.0.0"
@@ -3607,15 +4136,20 @@ functions-have-names@^1.2.2:
resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834"
integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==
+generic-pool@3.9.0:
+ version "3.9.0"
+ resolved "https://registry.yarnpkg.com/generic-pool/-/generic-pool-3.9.0.tgz#36f4a678e963f4fdb8707eab050823abc4e8f5e4"
+ integrity sha512-hymDOu5B53XvN4QT9dBmZxPX4CWhBPPLguTZ9MMFeFa/Kg0xWVfylOVNlJji/E7yTZWFd/q9GO5TxDLq156D7g==
+
gensync@^1.0.0-beta.2:
version "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:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.2.tgz#336975123e05ad0b7ba41f152ee4aadbea6cf598"
- integrity sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==
+get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, 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==
dependencies:
function-bind "^1.1.1"
has "^1.0.3"
@@ -3626,9 +4160,16 @@ get-own-enumerable-property-symbols@^3.0.0:
resolved "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz"
integrity sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==
+get-port-please@^2.6.1:
+ version "2.6.1"
+ resolved "https://registry.yarnpkg.com/get-port-please/-/get-port-please-2.6.1.tgz#80143de24fcaab39b01df977f66ad967e06b17d1"
+ integrity sha512-4PDSrL6+cuMM1xs6w36ZIkaKzzE0xzfVBCfebHIJ3FE8iB9oic/ECwPw3iNiD4h1AoJ5XLLBhEviFAVrZsDC5A==
+ dependencies:
+ fs-memo "^1.2.0"
+
get-stream@^6.0.0:
version "6.0.1"
- resolved "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz"
+ resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7"
integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==
get-symbol-description@^1.0.0:
@@ -3641,12 +4182,17 @@ get-symbol-description@^1.0.0:
getpass@^0.1.1:
version "0.1.7"
- resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa"
+ resolved "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz"
integrity sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==
dependencies:
assert-plus "^1.0.0"
-glob-parent@^5.1.2:
+github-from-package@0.0.0:
+ version "0.0.0"
+ resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce"
+ integrity sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==
+
+glob-parent@^5.1.2, glob-parent@~5.1.2:
version "5.1.2"
resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
@@ -3705,7 +4251,12 @@ globals@^13.6.0, globals@^13.9.0:
dependencies:
type-fest "^0.20.2"
-globby@^11.0.1, globby@^11.1.0:
+globalyzer@0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/globalyzer/-/globalyzer-0.1.0.tgz#cb76da79555669a1519d5a8edf093afaa0bf1465"
+ integrity sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==
+
+globby@^11.0.1, globby@^11.0.4, globby@^11.1.0:
version "11.1.0"
resolved "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz"
integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==
@@ -3722,6 +4273,11 @@ globjoin@^0.1.4:
resolved "https://registry.yarnpkg.com/globjoin/-/globjoin-0.1.4.tgz#2f4494ac8919e3767c5cbb691e9f463324285d43"
integrity sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==
+globrex@^0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/globrex/-/globrex-0.1.2.tgz#dd5d9ec826232730cd6793a5e33a9302985e6098"
+ integrity sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==
+
graceful-fs@^4.1.15:
version "4.2.9"
resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz"
@@ -3732,14 +4288,24 @@ 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==
+ dependencies:
+ cookie-es "^0.5.0"
+ destr "^1.2.0"
+ radix3 "^0.2.1"
+ ufo "^0.8.6"
+
har-schema@^2.0.0:
version "2.0.0"
- resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92"
+ resolved "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz"
integrity sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==
har-validator@~5.1.0:
version "5.1.5"
- resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd"
+ resolved "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz"
integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==
dependencies:
ajv "^6.12.3"
@@ -3793,7 +4359,7 @@ has@^1.0.3:
hoist-non-react-statics@^3.3.0, hoist-non-react-statics@^3.3.2:
version "3.3.2"
- resolved "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz"
+ resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45"
integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==
dependencies:
react-is "^16.7.0"
@@ -3815,9 +4381,14 @@ html-tags@^3.2.0:
resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-3.2.0.tgz#dbb3518d20b726524e4dd43de397eb0a95726961"
integrity sha512-vy7ClnArOZwCnqZgvv+ddgHgJiAFXe3Ge9ML5/mBctVJoUoYPCdxVucOywjDARn6CVoh3dRSFdPHy2sX80L0Wg==
+http-shutdown@^1.2.2:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/http-shutdown/-/http-shutdown-1.2.2.tgz#41bc78fc767637c4c95179bc492f312c0ae64c5f"
+ integrity sha512-S9wWkJ/VSY9/k4qcjG318bqJNruzE4HySUhFYknwmu6LBP97KLLfwNf+n4V1BHurvFNkSKLFnK/RsuUnRTf9Vw==
+
http-signature@~1.2.0:
version "1.2.0"
- resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1"
+ resolved "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz"
integrity sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==
dependencies:
assert-plus "^1.0.0"
@@ -3826,7 +4397,7 @@ http-signature@~1.2.0:
human-signals@^2.1.0:
version "2.1.0"
- resolved "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz"
+ resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0"
integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==
husky@^7.0.0:
@@ -3834,24 +4405,34 @@ husky@^7.0.0:
resolved "https://registry.npmjs.org/husky/-/husky-7.0.4.tgz"
integrity sha512-vbaCKN2QLtP/vD4yvs6iz6hBEo6wkSzs8HpRah1Z6aGmF2KW5PdYuAd7uX5a+OyBZHBhd+TFLqgjUgytQr4RvQ==
+ieee754@^1.1.13:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352"
+ integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==
+
ignore@^4.0.6:
version "4.0.6"
resolved "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz"
integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==
ignore@^5.2.0:
- version "5.2.0"
- resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a"
- integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.1.tgz#c2b1f76cb999ede1502f3a226a9310fdfe88d46c"
+ integrity sha512-d2qQLzTJ9WxQftPAuEQpSPmKqzxePjzVbpAVv62AQ64NTL+wR4JkrVqR/LqFsFEUsHDAiId52mJteHDFuDkElA==
+
+image-meta@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/image-meta/-/image-meta-0.1.1.tgz#a84dc7d5f61c7d60e85ec0c3ac81beee8646039b"
+ integrity sha512-+oXiHwOEPr1IE5zY0tcBLED/CYcre15J4nwL50x3o0jxWqEkyjrusiKP3YSU+tr9fvJp33ZcP5Gpj2295g3aEw==
immer@^9.0.12:
- version "9.0.15"
- resolved "https://registry.npmjs.org/immer/-/immer-9.0.15.tgz"
- integrity sha512-2eB/sswms9AEUSkOm4SbV5Y7Vmt/bKRwByd52jfLkW4OLYeaTP3EEiJ9agqU0O/tq6Dk62Zfj+TJSqfm1rLVGQ==
+ version "9.0.16"
+ resolved "https://registry.yarnpkg.com/immer/-/immer-9.0.16.tgz#8e7caab80118c2b54b37ad43e05758cdefad0198"
+ integrity sha512-qenGE7CstVm1NrHQbMh8YaSzTZTFNP3zPqr3YU0S0UY441j4bJTg4A2Hh5KAhwgaiU6ZZ1Ar6y/2f4TblnMReQ==
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"
+ resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b"
integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==
dependencies:
parent-module "^1.0.0"
@@ -3880,12 +4461,12 @@ inflight@^1.0.4:
once "^1.3.0"
wrappy "1"
-inherits@2:
+inherits@2, inherits@^2.0.3, inherits@^2.0.4:
version "2.0.4"
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
-ini@^1.3.5:
+ini@^1.3.5, ini@~1.3.0:
version "1.3.8"
resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c"
integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==
@@ -3931,7 +4512,7 @@ intl-messageformat@9.13.0:
ioredis@^5.2.3:
version "5.2.3"
- resolved "https://registry.yarnpkg.com/ioredis/-/ioredis-5.2.3.tgz#d5b37eb13e643241660d6cee4eeb41a026cda8c0"
+ resolved "https://registry.npmjs.org/ioredis/-/ioredis-5.2.3.tgz"
integrity sha512-gQNcMF23/NpvjCaa1b5YycUyQJ9rBNH2xP94LWinNpodMWVUPP5Ai/xXANn/SM7gfIvI62B5CCvZxhg5pOgyMw==
dependencies:
"@ioredis/commands" "^1.1.1"
@@ -3944,16 +4525,43 @@ ioredis@^5.2.3:
redis-parser "^3.0.0"
standard-as-callback "^2.1.0"
+ip-regex@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-5.0.0.tgz#cd313b2ae9c80c07bd3851e12bf4fa4dc5480632"
+ integrity sha512-fOCG6lhoKKakwv+C6KdsOnGvgXnmgfmp0myi3bcNwj3qfwPAxRKWEuFhvEFF7ceYIz6+1jRZ+yguLFAmUNPEfw==
+
ipaddr.js@^2.0.1:
version "2.0.1"
resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz"
integrity sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==
+ipx@^0.9.11:
+ version "0.9.11"
+ resolved "https://registry.yarnpkg.com/ipx/-/ipx-0.9.11.tgz#89bbeffc6f62df80dfd0f8fe1e68c6638d09251c"
+ integrity sha512-/wsBt7hV8rvNR6O4kwgOUAhtm0F/M/mXaolXot/Bz7fdOD+W7i9OtWuoASWv1PFwwtOunhZGaoCx8BOpSdG2VQ==
+ dependencies:
+ consola "^2.15.3"
+ defu "^6.1.0"
+ destr "^1.1.1"
+ etag "^1.8.1"
+ image-meta "^0.1.1"
+ listhen "^0.2.15"
+ ohmyfetch "^0.4.18"
+ pathe "^0.3.5"
+ sharp "^0.30.7"
+ ufo "^0.8.5"
+ xss "^1.0.14"
+
is-arrayish@^0.2.1:
version "0.2.1"
resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==
+is-arrayish@^0.3.1:
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03"
+ integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==
+
is-bigint@^1.0.1:
version "1.0.4"
resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3"
@@ -3961,6 +4569,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.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719"
@@ -3969,10 +4584,10 @@ 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.4:
- version "1.2.4"
- resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.4.tgz#47301d58dd0259407865547853df6d61fe471945"
- integrity sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==
+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==
is-ci@^3.0.1:
version "3.0.1"
@@ -3981,9 +4596,16 @@ is-ci@^3.0.1:
dependencies:
ci-info "^3.2.0"
-is-core-module@^2.5.0, is-core-module@^2.8.1, is-core-module@^2.9.0:
+is-core-module@^2.5.0, 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.yarnpkg.com/is-core-module/-/is-core-module-2.10.0.tgz#9012ede0a91c69587e647514e1d5277019e728ed"
+ 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"
@@ -3995,6 +4617,11 @@ is-date-object@^1.0.1:
dependencies:
has-tostringtag "^1.0.0"
+is-docker@^2.0.0:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa"
+ integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==
+
is-docker@^3.0.0:
version "3.0.0"
resolved "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz"
@@ -4010,7 +4637,7 @@ is-fullwidth-code-point@^3.0.0:
resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"
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.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084"
integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==
@@ -4069,6 +4696,11 @@ is-plain-object@^5.0.0:
resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344"
integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==
+is-promise@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-4.0.0.tgz#42ff9f84206c1991d26debf520dd5c01042dd2f3"
+ integrity sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==
+
is-regex@^1.1.4:
version "1.1.4"
resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958"
@@ -4091,7 +4723,7 @@ is-shared-array-buffer@^1.0.2:
is-stream@^2.0.0:
version "2.0.1"
- resolved "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz"
+ resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077"
integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==
is-string@^1.0.5, is-string@^1.0.7:
@@ -4110,7 +4742,7 @@ is-symbol@^1.0.2, is-symbol@^1.0.3:
is-typedarray@^1.0.0, is-typedarray@~1.0.0:
version "1.0.0"
- resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
+ resolved "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz"
integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==
is-weakref@^1.0.2:
@@ -4120,10 +4752,17 @@ is-weakref@^1.0.2:
dependencies:
call-bind "^1.0.2"
+is-wsl@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271"
+ integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==
+ dependencies:
+ is-docker "^2.0.0"
+
isbot@^3.4.5:
- version "3.5.2"
- resolved "https://registry.yarnpkg.com/isbot/-/isbot-3.5.2.tgz#eb33c40c0db53a0dd10d4a24dfb0d67f9978f344"
- integrity sha512-7iXQPDK1GBKvWS9N71bNnQ2KMcqwlMhdLkPma/EBn+8ZRkCbhun3yqqS1hmRqysTwJLGvJrUTmRIHibLWrXQQA==
+ version "3.6.5"
+ resolved "https://registry.yarnpkg.com/isbot/-/isbot-3.6.5.tgz#a749980d9dfba9ebcc03ee7b548d1f24dd8c9f1e"
+ integrity sha512-BchONELXt6yMad++BwGpa0oQxo/uD0keL7N15cYVf0A1oMIoNQ79OqeYdPMFWDrNhCqCbRuw9Y9F3QBjvAxZ5g==
isexe@^2.0.0:
version "2.0.0"
@@ -4132,7 +4771,7 @@ isexe@^2.0.0:
isstream@~0.1.2:
version "0.1.2"
- resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
+ resolved "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz"
integrity sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==
jest-worker@^26.2.1:
@@ -4159,7 +4798,7 @@ js-yaml@^3.13.1:
jsbn@~0.1.0:
version "0.1.1"
- resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"
+ resolved "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz"
integrity sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==
jsesc@^2.5.1:
@@ -4184,7 +4823,7 @@ json-parse-even-better-errors@^2.3.0:
json-schema-traverse@^0.4.1:
version "0.4.1"
- resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
+ resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz"
integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
json-schema-traverse@^1.0.0:
@@ -4194,7 +4833,7 @@ json-schema-traverse@^1.0.0:
json-schema@0.4.0:
version "0.4.0"
- resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5"
+ resolved "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz"
integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==
json-stable-stringify-without-jsonify@^1.0.1:
@@ -4211,7 +4850,7 @@ json-stable-stringify@^1.0.1:
json-stringify-safe@~5.0.1:
version "5.0.1"
- resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
+ resolved "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz"
integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==
json5@^1.0.1:
@@ -4223,12 +4862,12 @@ json5@^1.0.1:
json5@^2.1.2, json5@^2.2.1:
version "2.2.1"
- resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.1.tgz#655d50ed1e6f95ad1a3caababd2b0efda10b395c"
+ resolved "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz"
integrity sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==
jsonfile@^6.0.1:
version "6.1.0"
- resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz"
+ resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae"
integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==
dependencies:
universalify "^2.0.0"
@@ -4242,7 +4881,7 @@ jsonify@~0.0.0:
jsonparse@^1.2.0:
version "1.3.1"
- resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280"
+ resolved "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz"
integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==
jsonwebtoken@^8.5.1:
@@ -4263,7 +4902,7 @@ jsonwebtoken@^8.5.1:
jsprim@^1.2.2:
version "1.4.2"
- resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.2.tgz#712c65533a15c878ba59e9ed5f0e26d5b77c5feb"
+ resolved "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz"
integrity sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==
dependencies:
assert-plus "1.0.0"
@@ -4297,9 +4936,9 @@ jws@^3.2.2:
safe-buffer "^5.0.1"
kafkajs@^2.1.0:
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/kafkajs/-/kafkajs-2.2.0.tgz#43b2d13c82395acee4500f09d6c7d503db8c77ea"
- integrity sha512-+sdgyLuC0Idw1g9LSBXjtoCr4K+vVaHP+tulzAK+V+HHvO3uW5woNkzLnbBx0MN4WRuEl/5g84M3FSkH0ZDzrA==
+ version "2.2.3"
+ resolved "https://registry.yarnpkg.com/kafkajs/-/kafkajs-2.2.3.tgz#a1ab1b7c4a27699871a89b3978b5cfe5b05c6f3e"
+ integrity sha512-JmzIiLHE/TdQ7b4I2B/DNMtfhTh66fmEaEg7gGkyQXBC6f1A7I2jSjeUsVIJfC8d9YcEIURyBjtOEKBO5OHVhg==
kind-of@^6.0.2, kind-of@^6.0.3:
version "6.0.3"
@@ -4311,22 +4950,22 @@ kleur@^3.0.3:
resolved "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz"
integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==
-known-css-properties@^0.25.0:
- version "0.25.0"
- resolved "https://registry.yarnpkg.com/known-css-properties/-/known-css-properties-0.25.0.tgz#6ebc4d4b412f602e5cfbeb4086bd544e34c0a776"
- integrity sha512-b0/9J1O9Jcyik1GC6KC42hJ41jKwdO/Mq8Mdo5sYN+IuRTXs2YFHZC3kZSx6ueusqa95x3wLYe/ytKjbAfGixA==
+known-css-properties@^0.26.0:
+ version "0.26.0"
+ resolved "https://registry.yarnpkg.com/known-css-properties/-/known-css-properties-0.26.0.tgz#008295115abddc045a9f4ed7e2a84dc8b3a77649"
+ integrity sha512-5FZRzrZzNTBruuurWpvZnvP9pum+fe0HcK8z/ooo+U+Hmp4vtbyp1/QDsqmufirXy4egGzbaH/y2uCZf+6W5Kg==
-language-subtag-registry@~0.3.2:
+language-subtag-registry@^0.3.20:
version "0.3.22"
resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz#2e1500861b2e457eba7e7ae86877cbd08fa1fd1d"
integrity sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==
language-tags@^1.0.5:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/language-tags/-/language-tags-1.0.5.tgz#d321dbc4da30ba8bf3024e040fa5c14661f9193a"
- integrity sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/language-tags/-/language-tags-1.0.6.tgz#c087cc42cd92eb71f0925e9e271d4f8be5a93430"
+ integrity sha512-HNkaCgM8wZgE/BZACeotAAgpL9FUjEnhgF0FVQMIgH//zqTPreLYMb3rWYkYAqPoF75Jwuycp1da7uz66cfFQg==
dependencies:
- language-subtag-registry "~0.3.2"
+ language-subtag-registry "^0.3.20"
levn@^0.4.1:
version "0.4.1"
@@ -4361,6 +5000,33 @@ lint-staged@^11.0.0:
stringify-object "3.3.0"
supports-color "8.1.1"
+listhen@^0.2.15:
+ version "0.2.15"
+ resolved "https://registry.yarnpkg.com/listhen/-/listhen-0.2.15.tgz#1af0f47f94a09d5f3ba4efa5a4b07df65198bb59"
+ integrity sha512-F/IWj/aJLeokHAIVY+l3JoWRUnbRaf2F0cr+Ybc1YyozMA/yP0C2nf3c0Oi7vAbFvtfiwfWWfP7bIrQc/u5L1A==
+ dependencies:
+ clipboardy "^3.0.0"
+ colorette "^2.0.19"
+ defu "^6.0.0"
+ get-port-please "^2.6.1"
+ http-shutdown "^1.2.2"
+ 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==
+ dependencies:
+ clipboardy "^3.0.0"
+ colorette "^2.0.19"
+ defu "^6.1.0"
+ 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"
+
listr2@^3.12.2:
version "3.14.0"
resolved "https://registry.npmjs.org/listr2/-/listr2-3.14.0.tgz"
@@ -4404,7 +5070,7 @@ locate-path@^5.0.0:
locate-path@^6.0.0:
version "6.0.0"
- resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286"
+ resolved "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz"
integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==
dependencies:
p-locate "^5.0.0"
@@ -4421,7 +5087,7 @@ lodash.debounce@^4.0.8:
lodash.defaults@^4.2.0:
version "4.2.0"
- resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c"
+ resolved "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz"
integrity sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==
lodash.includes@^4.3.0:
@@ -4431,7 +5097,7 @@ lodash.includes@^4.3.0:
lodash.isarguments@^3.1.0:
version "3.1.0"
- resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a"
+ resolved "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz"
integrity sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==
lodash.isboolean@^3.0.3:
@@ -4486,7 +5152,7 @@ lodash.truncate@^4.4.2:
lodash@4.17.21, lodash@^4.17.21:
version "4.17.21"
- resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
+ resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz"
integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
log-update@^4.0.0:
@@ -4551,12 +5217,12 @@ mathml-tag-names@^2.1.3:
integrity sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==
maxmind@^4.3.6:
- version "4.3.6"
- resolved "https://registry.npmjs.org/maxmind/-/maxmind-4.3.6.tgz"
- integrity sha512-CwnEZqJX0T6b2rWrc0/V3n9hL/hWAMEn7fY09077YJUHiHx7cn/esA2ZIz8BpYLSJUf7cGVel0oUJa9jMwyQpg==
+ version "4.3.8"
+ resolved "https://registry.yarnpkg.com/maxmind/-/maxmind-4.3.8.tgz#e284edd3619987211ee45909076c6d4fcd2dc4df"
+ integrity sha512-HrfxEu5yPBPtTy/OT+W5bPQwEfLUX0EHqe2EbJiB47xQMumHqXvSP7PAwzV8Z++NRCmQwy4moQrTSt0+dH+Jmg==
dependencies:
mmdb-lib "2.0.2"
- tiny-lru "8.0.2"
+ tiny-lru "9.0.3"
mdn-data@2.0.14:
version "2.0.14"
@@ -4565,7 +5231,7 @@ mdn-data@2.0.14:
"memoize-one@>=3.1.1 <6", memoize-one@^5.1.1:
version "5.2.1"
- resolved "https://registry.npmjs.org/memoize-one/-/memoize-one-5.2.1.tgz"
+ resolved "https://registry.yarnpkg.com/memoize-one/-/memoize-one-5.2.1.tgz#8337aa3c4335581839ec01c3d594090cebe8f00e"
integrity sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==
memorystream@^0.3.1:
@@ -4610,7 +5276,7 @@ meow@^9.0.0:
merge-stream@^2.0.0:
version "2.0.0"
- resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz"
+ resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60"
integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==
merge2@^1.3.0, merge2@^1.4.1:
@@ -4618,6 +5284,11 @@ merge2@^1.3.0, merge2@^1.4.1:
resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae"
integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==
+micro-memoize@^4.0.11:
+ version "4.0.11"
+ resolved "https://registry.yarnpkg.com/micro-memoize/-/micro-memoize-4.0.11.tgz#f664afc8bd8c11cb2838716a7306d6e1ec205d3a"
+ integrity sha512-CjxsaYe4j43df32DtzzNCwanPqZjZDwuQAZilsCYpa2ZVtSPDjHXbTlR4gsEZRyO9/twHs0b7HLjvy/sowl7sA==
+
micromatch@^4.0.4, micromatch@^4.0.5:
version "4.0.5"
resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6"
@@ -4628,21 +5299,26 @@ micromatch@^4.0.4, micromatch@^4.0.5:
mime-db@1.52.0:
version "1.52.0"
- resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70"
+ resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz"
integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==
mime-types@^2.1.12, mime-types@~2.1.19:
version "2.1.35"
- resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a"
+ resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz"
integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==
dependencies:
mime-db "1.52.0"
mimic-fn@^2.1.0:
version "2.1.0"
- resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz"
+ resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"
integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==
+mimic-response@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9"
+ integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==
+
min-indent@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869"
@@ -4664,40 +5340,63 @@ minimist-options@4.1.0, minimist-options@^4.0.2:
is-plain-obj "^1.1.0"
kind-of "^6.0.3"
-minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6:
+minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.6:
+ version "1.2.7"
+ resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.7.tgz#daa1c4d91f507390437c6a8bc01078e7000c4d18"
+ integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==
+
+minimist@^1.2.5:
version "1.2.6"
- resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44"
+ resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz"
integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==
minipass@^3.0.0:
- version "3.1.6"
- resolved "https://registry.npmjs.org/minipass/-/minipass-3.1.6.tgz"
- integrity sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ==
+ version "3.3.4"
+ resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.4.tgz#ca99f95dd77c43c7a76bf51e6d200025eee0ffae"
+ integrity sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw==
dependencies:
yallist "^4.0.0"
minizlib@^2.1.1:
version "2.1.2"
- resolved "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz"
+ resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931"
integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==
dependencies:
minipass "^3.0.0"
yallist "^4.0.0"
-mkdirp@^1.0.3:
+mkdir@^0.0.2:
+ version "0.0.2"
+ resolved "https://registry.yarnpkg.com/mkdir/-/mkdir-0.0.2.tgz#3b9da7a4e5b13004ebc636581b160e1e04776851"
+ integrity sha512-98OnjcWaNEIRUJJe9rFoWlbkQ5n9z8F86wIPCrI961YEViiVybTuJln919WuuSHSnlrqXy0ELKCntoPy8C7lqg==
+
+mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3:
+ version "0.5.3"
+ resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113"
+ integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==
+
+mkdirp@^1.0.3, mkdirp@^1.0.4:
version "1.0.4"
- resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz"
+ resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e"
integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==
mmdb-lib@2.0.2:
version "2.0.2"
- resolved "https://registry.npmjs.org/mmdb-lib/-/mmdb-lib-2.0.2.tgz"
+ resolved "https://registry.yarnpkg.com/mmdb-lib/-/mmdb-lib-2.0.2.tgz#fe60404142c0456c19607c72caa15821731ae957"
integrity sha512-shi1I+fCPQonhTi7qyb6hr7hi87R7YS69FlfJiMFuJ12+grx0JyL56gLNzGTYXPU7EhAPkMLliGeyHer0K+AVA==
+moize@^6.1.0:
+ version "6.1.3"
+ resolved "https://registry.yarnpkg.com/moize/-/moize-6.1.3.tgz#2e188a5ee02e4e3c06beaab39a4a3c92f92dd9aa"
+ integrity sha512-Cn+1T5Ypieeo46fn8X98V2gHj2VSRohVPjvT8BRvNANJJC3UOeege/G84xA/3S9c5qA4p9jOdSB1jfhumwe8qw==
+ dependencies:
+ fast-equals "^3.0.1"
+ micro-memoize "^4.0.11"
+
moment-timezone@^0.5.35:
- version "0.5.35"
- resolved "https://registry.yarnpkg.com/moment-timezone/-/moment-timezone-0.5.35.tgz#6fa2631bdbe8ff04f6b8753f7199516be6dc9839"
- integrity sha512-cY/pBOEXepQvlgli06ttCTKcIf8cD1nmNwOKQQAdHBqYApQSpAqotBMX0RJZNgMp6i0PlZuf1mFtnlyEkwyvFw==
+ version "0.5.39"
+ resolved "https://registry.yarnpkg.com/moment-timezone/-/moment-timezone-0.5.39.tgz#342625a3b98810f04c8f4ea917e448d3525e600b"
+ integrity sha512-hoB6suq4ISDj7BDgctiOy6zljBsdYT0++0ZzZm9rtxIvJhIbQ3nmbgSWe7dNFGurl6/7b1OUkHlmN9JWgXVz7w==
dependencies:
moment ">= 2.9.0"
@@ -4706,9 +5405,14 @@ moment-timezone@^0.5.35:
resolved "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz"
integrity sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==
+mri@^1.2.0:
+ version "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.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
+ resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz"
integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==
ms@2.1.2:
@@ -4721,79 +5425,119 @@ ms@^2.1.1:
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
+murmurhash@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/murmurhash/-/murmurhash-2.0.1.tgz#4097720e08cf978872194ad84ea5be2dec9b610f"
+ integrity sha512-5vQEh3y+DG/lMPM0mCGPDnyV8chYg/g7rl6v3Gd8WMF9S429ox3Xk8qrk174kWhG767KQMqqxLD1WnGd77hiew==
+
nanoid@^3.3.4:
version "3.3.4"
resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.4.tgz#730b67e3cd09e2deacf03c027c81c9d9dbc5e8ab"
integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==
+napi-build-utils@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-1.0.2.tgz#b1fddc0b2c46e380a0b7a76f984dd47c41a13806"
+ integrity sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==
+
natural-compare@^1.4.0:
version "1.4.0"
resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz"
integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=
-next-basics@^0.12.0:
- version "0.12.0"
- resolved "https://registry.yarnpkg.com/next-basics/-/next-basics-0.12.0.tgz#e946cdb3f32d5d84f67e7c35b6e2e96750763c62"
- integrity sha512-3meED1Z9m8QvOsG4bz5OAuyjROdV9Cf75Wq2t+cHiGBh+y8qhTluJduqIXuoY5x0S72/5XvY1mwthW+Og47H9A==
+next-basics@^0.24.0:
+ version "0.24.0"
+ resolved "https://registry.yarnpkg.com/next-basics/-/next-basics-0.24.0.tgz#21ebd34276b3a957b1f6c644de494cc1a17953ea"
+ integrity sha512-N0wABIkzFpDIoxSEyeLZ8wNENLhcQtPqEY/mKLzpNfr4x4bQ0c5qnXEtrNEftWeQt0osjiuL5yFlnXOOQgTHpQ==
dependencies:
+ base-x "^4.0.0"
bcryptjs "^2.4.3"
jsonwebtoken "^8.5.1"
-next@^12.2.5:
- version "12.2.5"
- resolved "https://registry.yarnpkg.com/next/-/next-12.2.5.tgz#14fb5975e8841fad09553b8ef41fe1393602b717"
- integrity sha512-tBdjqX5XC/oFs/6gxrZhjmiq90YWizUYU6qOWAfat7zJwrwapJ+BYgX2PmiacunXMaRpeVT4vz5MSPSLgNkrpA==
+next@^12.3.1:
+ version "12.3.4"
+ resolved "https://registry.yarnpkg.com/next/-/next-12.3.4.tgz#f2780a6ebbf367e071ce67e24bd8a6e05de2fcb1"
+ integrity sha512-VcyMJUtLZBGzLKo3oMxrEF0stxh8HwuW976pAzlHhI3t8qJ4SROjCrSh1T24bhrbjw55wfZXAbXPGwPt5FLRfQ==
dependencies:
- "@next/env" "12.2.5"
- "@swc/helpers" "0.4.3"
- caniuse-lite "^1.0.30001332"
+ "@next/env" "12.3.4"
+ "@swc/helpers" "0.4.11"
+ caniuse-lite "^1.0.30001406"
postcss "8.4.14"
- styled-jsx "5.0.4"
+ styled-jsx "5.0.7"
use-sync-external-store "1.2.0"
optionalDependencies:
- "@next/swc-android-arm-eabi" "12.2.5"
- "@next/swc-android-arm64" "12.2.5"
- "@next/swc-darwin-arm64" "12.2.5"
- "@next/swc-darwin-x64" "12.2.5"
- "@next/swc-freebsd-x64" "12.2.5"
- "@next/swc-linux-arm-gnueabihf" "12.2.5"
- "@next/swc-linux-arm64-gnu" "12.2.5"
- "@next/swc-linux-arm64-musl" "12.2.5"
- "@next/swc-linux-x64-gnu" "12.2.5"
- "@next/swc-linux-x64-musl" "12.2.5"
- "@next/swc-win32-arm64-msvc" "12.2.5"
- "@next/swc-win32-ia32-msvc" "12.2.5"
- "@next/swc-win32-x64-msvc" "12.2.5"
+ "@next/swc-android-arm-eabi" "12.3.4"
+ "@next/swc-android-arm64" "12.3.4"
+ "@next/swc-darwin-arm64" "12.3.4"
+ "@next/swc-darwin-x64" "12.3.4"
+ "@next/swc-freebsd-x64" "12.3.4"
+ "@next/swc-linux-arm-gnueabihf" "12.3.4"
+ "@next/swc-linux-arm64-gnu" "12.3.4"
+ "@next/swc-linux-arm64-musl" "12.3.4"
+ "@next/swc-linux-x64-gnu" "12.3.4"
+ "@next/swc-linux-x64-musl" "12.3.4"
+ "@next/swc-win32-arm64-msvc" "12.3.4"
+ "@next/swc-win32-ia32-msvc" "12.3.4"
+ "@next/swc-win32-x64-msvc" "12.3.4"
nice-try@^1.0.4:
version "1.0.5"
resolved "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz"
integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==
+node-abi@^3.3.0:
+ version "3.28.0"
+ resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.28.0.tgz#b0df8b317e1c4f2f323756c5fc8ffccc5bca4718"
+ integrity sha512-fRlDb4I0eLcQeUvGq7IY3xHrSb0c9ummdvDSYWfT9+LKP+3jCKw/tKoqaM7r1BAoiAC6GtwyjaGnOz6B3OtF+A==
+ 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==
+
node-domexception@^1.0.0:
version "1.0.0"
- resolved "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz"
+ resolved "https://registry.yarnpkg.com/node-domexception/-/node-domexception-1.0.0.tgz#6888db46a1f71c0b76b3f7555016b63fe64766e5"
integrity sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==
+node-fetch-native@^0.1.8:
+ version "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@^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==
+ dependencies:
+ whatwg-url "^5.0.0"
+
node-fetch@^3.2.8:
- version "3.2.10"
- resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-3.2.10.tgz"
- integrity sha512-MhuzNwdURnZ1Cp4XTazr69K0BTizsBroX7Zx3UgDSVcZYKF/6p0CBe4EUb/hLqmzVhl0UpYfgRljQ4yxE+iCxA==
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-3.3.0.tgz#37e71db4ecc257057af828d523a7243d651d91e4"
+ integrity sha512-BKwRP/O0UvoMKp7GNdwPlObhYGB5DQqwhEDQlNKuoqwVYSxkSZCSbHjnFFmUEtwSKRPU4kNK8PbDYYitwaE3QA==
dependencies:
data-uri-to-buffer "^4.0.0"
fetch-blob "^3.1.4"
formdata-polyfill "^4.0.10"
-node-releases@^2.0.3:
- version "2.0.5"
- resolved "https://registry.npmjs.org/node-releases/-/node-releases-2.0.5.tgz"
- integrity sha512-U9h1NLROZTq9uE1SNffn6WuPDg8icmi3ns4rEl/oTfIle4iLjTliCzgTsbaIFMq/Xn078/lfY/BL0GWZ+psK4Q==
+node-forge@^1, node-forge@^1.3.1:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.3.1.tgz#be8da2af243b2417d5f646a770663a92b7e9ded3"
+ integrity sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==
node-releases@^2.0.6:
version "2.0.6"
resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.6.tgz#8a7088c63a55e493845683ebf3c828d8c51c5503"
integrity sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==
+node-stream-zip@^1.15.0:
+ version "1.15.0"
+ resolved "https://registry.yarnpkg.com/node-stream-zip/-/node-stream-zip-1.15.0.tgz#158adb88ed8004c6c49a396b50a6a5de3bca33ea"
+ integrity sha512-LN4fydt9TqhZhThkZIVQnF9cwjU3qmUH9h78Mx/K7d3VvfRqqwthLwJEUOEL0QPZ0XQmNN7be5Ggit5+4dq3Bw==
+
normalize-package-data@^2.3.2, normalize-package-data@^2.5.0:
version "2.5.0"
resolved "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz"
@@ -4814,7 +5558,7 @@ normalize-package-data@^3.0.0:
semver "^7.3.4"
validate-npm-package-license "^3.0.1"
-normalize-path@^3.0.0:
+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==
@@ -4841,7 +5585,7 @@ npm-run-all@^4.1.5:
npm-run-path@^4.0.1:
version "4.0.1"
- resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz"
+ resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea"
integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==
dependencies:
path-key "^3.0.0"
@@ -4855,7 +5599,7 @@ nth-check@^2.0.1:
oauth-sign@~0.9.0:
version "0.9.0"
- resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455"
+ resolved "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz"
integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==
object-assign@^4, object-assign@^4.1.1:
@@ -4863,7 +5607,7 @@ object-assign@^4, object-assign@^4.1.1:
resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz"
integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=
-object-inspect@^1.12.0, object-inspect@^1.9.0:
+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==
@@ -4873,7 +5617,7 @@ object-keys@^1.1.1:
resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e"
integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==
-object.assign@^4.1.0, object.assign@^4.1.2, object.assign@^4.1.3:
+object.assign@^4.1.3, object.assign@^4.1.4:
version "4.1.4"
resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f"
integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==
@@ -4883,42 +5627,52 @@ object.assign@^4.1.0, object.assign@^4.1.2, object.assign@^4.1.3:
has-symbols "^1.0.3"
object-keys "^1.1.1"
-object.entries@^1.1.5:
- version "1.1.5"
- resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.5.tgz#e1acdd17c4de2cd96d5a08487cfb9db84d881861"
- integrity sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==
+object.entries@^1.1.6:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.6.tgz#9737d0e5b8291edd340a3e3264bb8a3b00d5fa23"
+ integrity sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==
dependencies:
call-bind "^1.0.2"
- define-properties "^1.1.3"
- es-abstract "^1.19.1"
+ define-properties "^1.1.4"
+ es-abstract "^1.20.4"
-object.fromentries@^2.0.5:
- version "2.0.5"
- resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.5.tgz#7b37b205109c21e741e605727fe8b0ad5fa08251"
- integrity sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw==
+object.fromentries@^2.0.6:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.6.tgz#cdb04da08c539cffa912dcd368b886e0904bfa73"
+ integrity sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==
dependencies:
call-bind "^1.0.2"
- define-properties "^1.1.3"
- es-abstract "^1.19.1"
+ define-properties "^1.1.4"
+ es-abstract "^1.20.4"
-object.hasown@^1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.1.1.tgz#ad1eecc60d03f49460600430d97f23882cf592a3"
- integrity sha512-LYLe4tivNQzq4JdaWW6WO3HMZZJWzkkH8fnI6EebWl0VZth2wL2Lovm74ep2/gZzlaTdV62JZHEqHQ2yVn8Q/A==
+object.hasown@^1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.1.2.tgz#f919e21fad4eb38a57bc6345b3afd496515c3f92"
+ integrity sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==
dependencies:
define-properties "^1.1.4"
- es-abstract "^1.19.5"
+ es-abstract "^1.20.4"
-object.values@^1.1.5:
- version "1.1.5"
- resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.5.tgz#959f63e3ce9ef108720333082131e4a459b716ac"
- integrity sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==
+object.values@^1.1.5, 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==
dependencies:
call-bind "^1.0.2"
- define-properties "^1.1.3"
- es-abstract "^1.19.1"
+ define-properties "^1.1.4"
+ es-abstract "^1.20.4"
-once@^1.3.0:
+ohmyfetch@^0.4.18, ohmyfetch@^0.4.19:
+ version "0.4.21"
+ resolved "https://registry.yarnpkg.com/ohmyfetch/-/ohmyfetch-0.4.21.tgz#6850db751fc7bbf08153aa8b11ff1ef45fcfd963"
+ integrity sha512-VG7f/JRvqvBOYvL0tHyEIEG7XHWm7OqIfAs6/HqwWwDfjiJ1g0huIpe5sFEmyb+7hpFa1EGNH2aERWR72tlClw==
+ dependencies:
+ destr "^1.2.0"
+ node-fetch-native "^0.1.8"
+ ufo "^0.8.6"
+ undici "^5.12.0"
+
+once@^1.3.0, once@^1.3.1, once@^1.4.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==
@@ -4944,6 +5698,11 @@ optionator@^0.9.1:
type-check "^0.4.0"
word-wrap "^1.2.3"
+outdent@^0.8.0:
+ version "0.8.0"
+ resolved "https://registry.yarnpkg.com/outdent/-/outdent-0.8.0.tgz#2ebc3e77bf49912543f1008100ff8e7f44428eb0"
+ integrity sha512-KiOAIsdpUTcAXuykya5fnVVT+/5uS0Q1mrkRHcF89tpieSmY33O/tmc54CqwA+bfhbtEfZUNLHaPUiB9X3jt1A==
+
p-limit@^2.2.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1"
@@ -4951,9 +5710,9 @@ p-limit@^2.2.0:
dependencies:
p-try "^2.0.0"
-p-limit@^3.0.2:
+p-limit@^3.0.2, p-limit@^3.1.0:
version "3.1.0"
- resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b"
+ resolved "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz"
integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==
dependencies:
yocto-queue "^0.1.0"
@@ -4967,7 +5726,7 @@ p-locate@^4.1.0:
p-locate@^5.0.0:
version "5.0.0"
- resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834"
+ resolved "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz"
integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==
dependencies:
p-limit "^3.0.2"
@@ -5046,9 +5805,19 @@ path-type@^4.0.0:
resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b"
integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==
+pathe@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/pathe/-/pathe-0.2.0.tgz#30fd7bbe0a0d91f0e60bae621f5d19e9e225c339"
+ integrity sha512-sTitTPYnn23esFR3RlqYBWn4c45WGeLcsKzQiUpXJAyfcWkolvlYpV8FLo7JishK946oQwMFUCHXQ9AjGPKExw==
+
+pathe@^0.3.5:
+ version "0.3.9"
+ resolved "https://registry.yarnpkg.com/pathe/-/pathe-0.3.9.tgz#4baff768f37f03e3d9341502865fb93116f65191"
+ integrity sha512-6Y6s0vT112P3jD8dGfuS6r+lpa0qqNrLyHPOwvXMnyNTQaYiwgau2DP3aNDsR13xqtGj7rrPo+jFUATpU6/s+g==
+
performance-now@^2.1.0:
version "2.1.0"
- resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
+ resolved "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz"
integrity sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==
picocolors@^1.0.0:
@@ -5056,7 +5825,7 @@ picocolors@^1.0.0:
resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c"
integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==
-picomatch@^2.2.2, picomatch@^2.3.1:
+picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.3.1:
version "2.3.1"
resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42"
integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
@@ -5335,7 +6104,7 @@ postcss-resolve-nested-selector@^0.1.1:
postcss-rtlcss@^3.6.1:
version "3.7.2"
- resolved "https://registry.yarnpkg.com/postcss-rtlcss/-/postcss-rtlcss-3.7.2.tgz#0a06cbfd74aec36ad1fe6c6fd1ec74069c62ce45"
+ resolved "https://registry.npmjs.org/postcss-rtlcss/-/postcss-rtlcss-3.7.2.tgz"
integrity sha512-GurrGedCKvOTe1QrifI+XpDKXA3bJky1v8KiOa/TYYHs1bfJOxI53GIRvVSqLJLly7e1WcNMz8KMESTN01vbZQ==
dependencies:
rtlcss "^3.5.0"
@@ -5352,7 +6121,15 @@ postcss-selector-not@^5.0.0:
dependencies:
balanced-match "^1.0.0"
-postcss-selector-parser@^6.0.10, postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4, postcss-selector-parser@^6.0.6, postcss-selector-parser@^6.0.9:
+postcss-selector-parser@^6.0.10:
+ version "6.0.11"
+ resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz#2e41dc39b7ad74046e1615185185cd0b17d0c8dc"
+ integrity sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==
+ dependencies:
+ cssesc "^3.0.0"
+ util-deprecate "^1.0.2"
+
+postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4, postcss-selector-parser@^6.0.6, postcss-selector-parser@^6.0.9:
version "6.0.10"
resolved "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz"
integrity sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==
@@ -5367,22 +6144,49 @@ postcss-value-parser@^4.0.0, postcss-value-parser@^4.1.0, postcss-value-parser@^
postcss@8.4.14, postcss@^8.1.10:
version "8.4.14"
- resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz"
+ resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.14.tgz#ee9274d5622b4858c1007a74d76e42e56fd21caf"
integrity sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==
dependencies:
nanoid "^3.3.4"
picocolors "^1.0.0"
source-map-js "^1.0.2"
-postcss@^8.3.11, postcss@^8.4.12, postcss@^8.4.16:
+postcss@^8.3.11:
version "8.4.16"
- resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.16.tgz#33a1d675fac39941f5f445db0de4db2b6e01d43c"
+ resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.16.tgz"
integrity sha512-ipHE1XBvKzm5xI7hiHCZJCSugxvsdq2mPnsq5+UF+VHCjiBvtDrlxJfMBToWaP9D5XlgNmcFGqoHmUn0EYEaRQ==
dependencies:
nanoid "^3.3.4"
picocolors "^1.0.0"
source-map-js "^1.0.2"
+postcss@^8.4.12, postcss@^8.4.19:
+ version "8.4.19"
+ resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.19.tgz#61178e2add236b17351897c8bcc0b4c8ecab56fc"
+ integrity sha512-h+pbPsyhlYj6N2ozBmHhHrs9DzGmbaarbLvWipMRO7RLS+v4onj26MPFXA5OBYFxyqYhUJK456SwDcY9H2/zsA==
+ dependencies:
+ nanoid "^3.3.4"
+ picocolors "^1.0.0"
+ source-map-js "^1.0.2"
+
+prebuild-install@^7.1.1:
+ version "7.1.1"
+ resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-7.1.1.tgz#de97d5b34a70a0c81334fd24641f2a1702352e45"
+ integrity sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==
+ dependencies:
+ detect-libc "^2.0.0"
+ expand-template "^2.0.3"
+ github-from-package "0.0.0"
+ minimist "^1.2.3"
+ mkdirp-classic "^0.5.3"
+ napi-build-utils "^1.0.1"
+ node-abi "^3.3.0"
+ pump "^3.0.0"
+ rc "^1.2.7"
+ simple-get "^4.0.0"
+ tar-fs "^2.0.0"
+ tunnel-agent "^0.6.0"
+
prelude-ls@^1.2.1:
version "1.2.1"
resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz"
@@ -5396,16 +6200,21 @@ prettier-linter-helpers@^1.0.0:
fast-diff "^1.1.2"
prettier@^2.6.2:
- version "2.7.1"
- resolved "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz"
- integrity sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==
+ version "2.8.0"
+ resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.0.tgz#c7df58393c9ba77d6fba3921ae01faf994fb9dc9"
+ integrity sha512-9Lmg8hTFZKG0Asr/kW9Bp8tJjRVluO8EJQVfY2T7FMw9T5jy4I/Uvx0Rca/XWf50QQ1/SS48+6IJWnrb+2yemA==
-prisma@4.3.1:
- version "4.3.1"
- resolved "https://registry.yarnpkg.com/prisma/-/prisma-4.3.1.tgz#9e4c24e49710392be40ee75fb3d9341d7487881e"
- integrity sha512-90xo06wtqil76Xsi3mNpc4Js3SdDRR5g4qb9h+4VWY4Y8iImJY6xc3PX+C9xxTSt1lr0Q89A0MLkJjd8ax6KiQ==
+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.5.0:
+ version "4.5.0"
+ resolved "https://registry.yarnpkg.com/prisma/-/prisma-4.5.0.tgz#361ae3f4476d0821b97645e5da42975a7c2943bb"
+ integrity sha512-9Aeg4qiKlv9Wsjz4NO8k2CzRzlvS3A4FYVJ5+28sBBZ0eEwbiVOE/Jj7v6rZC1tFW2s4GSICQOAyuOjc6WsNew==
dependencies:
- "@prisma/engines" "4.3.1"
+ "@prisma/engines" "4.5.0"
progress@^2.0.0:
version "2.0.3"
@@ -5431,12 +6240,20 @@ prop-types@^15.7.2, prop-types@^15.8.1:
psl@^1.1.24:
version "1.9.0"
- resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7"
+ resolved "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz"
integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==
+pump@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64"
+ integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==
+ dependencies:
+ end-of-stream "^1.1.0"
+ once "^1.3.1"
+
punycode@^1.4.1:
version "1.4.1"
- resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
+ resolved "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz"
integrity sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==
punycode@^2.1.0:
@@ -5446,12 +6263,12 @@ punycode@^2.1.0:
qs@~6.5.2:
version "6.5.3"
- resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.3.tgz#3aeeffc91967ef6e35c0e488ef46fb296ab76aad"
+ resolved "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz"
integrity sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==
querystring@0.2.0:
version "0.2.0"
- resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620"
+ resolved "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz"
integrity sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==
queue-microtask@^1.2.2:
@@ -5464,9 +6281,14 @@ 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==
+
raf-schd@^4.0.2:
version "4.0.3"
- resolved "https://registry.npmjs.org/raf-schd/-/raf-schd-4.0.3.tgz"
+ resolved "https://registry.yarnpkg.com/raf-schd/-/raf-schd-4.0.3.tgz#5d6c34ef46f8b2a0e880a8fcdb743efc5bfdbc1a"
integrity sha512-tQkJl2GRWh83ui2DiPTJz9wEiMN20syf+5oKfB03yYP7ioZcJwsIK8FjrtLwH1m7C7e+Tt2yYBlrOpdT+dyeIQ==
randombytes@^2.1.0:
@@ -5476,10 +6298,32 @@ randombytes@^2.1.0:
dependencies:
safe-buffer "^5.1.0"
+rc@^1.2.7:
+ version "1.2.8"
+ resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed"
+ integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==
+ dependencies:
+ deep-extend "^0.6.0"
+ ini "~1.3.0"
+ minimist "^1.2.0"
+ strip-json-comments "~2.0.1"
+
+react-basics@^0.37.0:
+ version "0.37.0"
+ resolved "https://registry.yarnpkg.com/react-basics/-/react-basics-0.37.0.tgz#87ce9de15372bcb79b70779e54ec2dfaebd97473"
+ integrity sha512-0f7plY1A2BvJVRxudyUlNjqCFMLub/XwuepAl1knblwOUOApQ3nUpIFoVI+OU4ThmA6EDlsEdoaXkfAomM1UXg==
+ dependencies:
+ classnames "^2.3.1"
+ react "^18.2.0"
+ react-dom "^18.2.0"
+ react-hook-form "^7.34.2"
+ react-spring "^9.5.5"
+ react-window "^1.8.6"
+
react-beautiful-dnd@^13.1.0:
- version "13.1.0"
- resolved "https://registry.npmjs.org/react-beautiful-dnd/-/react-beautiful-dnd-13.1.0.tgz"
- integrity sha512-aGvblPZTJowOWUNiwd6tNfEpgkX5OxmpqxHKNW/4VmvZTNTbeiq7bA3bn5T+QSF2uibXB0D1DmJsb1aC/+3cUA==
+ version "13.1.1"
+ resolved "https://registry.yarnpkg.com/react-beautiful-dnd/-/react-beautiful-dnd-13.1.1.tgz#b0f3087a5840920abf8bb2325f1ffa46d8c4d0a2"
+ integrity sha512-0Lvs4tq2VcrEjEgDXHjT98r+63drkKEgqyxdA7qD3mvKwga6a5SscbdLPO2IExotU1jW8L0Ksdl0Cj2AF67nPQ==
dependencies:
"@babel/runtime" "^7.9.2"
css-box-model "^1.2.0"
@@ -5489,20 +6333,24 @@ react-beautiful-dnd@^13.1.0:
redux "^4.0.4"
use-memo-one "^1.1.1"
-react-dom@^17.0.0:
- version "17.0.2"
- resolved "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz"
- integrity sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==
+react-dom@^18.2.0:
+ version "18.2.0"
+ resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d"
+ integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==
dependencies:
loose-envify "^1.1.0"
- object-assign "^4.1.1"
- scheduler "^0.20.2"
+ scheduler "^0.23.0"
react-fast-compare@^2.0.1:
version "2.0.4"
resolved "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-2.0.4.tgz"
integrity sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw==
+react-hook-form@^7.34.2:
+ version "7.39.5"
+ resolved "https://registry.yarnpkg.com/react-hook-form/-/react-hook-form-7.39.5.tgz#a4272b60288ef5e1bb42bbb6ba3b36d243ab2879"
+ integrity sha512-OE0HKyz5IPc6svN2wd+e+evidZrw4O4WZWAWYzQVZuHi+hYnHFSLnxOq0ddjbdmaLIsLHut/ab7j72y2QT3+KA==
+
react-intl@^5.24.7:
version "5.25.1"
resolved "https://registry.npmjs.org/react-intl/-/react-intl-5.25.1.tgz"
@@ -5521,18 +6369,18 @@ react-intl@^5.24.7:
react-is@^16.13.1, react-is@^16.7.0:
version "16.13.1"
- resolved "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz"
+ resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==
react-is@^17.0.2:
version "17.0.2"
- resolved "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz"
+ resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0"
integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==
react-redux@^7.2.0:
- version "7.2.8"
- resolved "https://registry.npmjs.org/react-redux/-/react-redux-7.2.8.tgz"
- integrity sha512-6+uDjhs3PSIclqoCk0kd6iX74gzrGc3W5zcAjbrFgEdIjRSQObdIwfx80unTkVUYvbQ95Y8Av3OvFHq1w5EOUw==
+ version "7.2.9"
+ resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-7.2.9.tgz#09488fbb9416a4efe3735b7235055442b042481d"
+ integrity sha512-Gx4L3uM182jEEayZfRbI/G11ZpYdNAnBs70lFVMNdHJI76XYtR+7m0MN+eAs7UHBPhWXcnFPaS+9owSCJQHNpQ==
dependencies:
"@babel/runtime" "^7.15.4"
"@types/react-redux" "^7.1.20"
@@ -5551,24 +6399,24 @@ react-simple-maps@^2.3.0:
d3-zoom "^2.0.0"
topojson-client "^3.1.0"
-react-spring@^9.4.4:
- version "9.5.2"
- resolved "https://registry.yarnpkg.com/react-spring/-/react-spring-9.5.2.tgz#b9929ad2806e56e6408b27189ec9cdf1dc003873"
- integrity sha512-OGWNgKi2TSjpqsK67NCUspaCgEvWcG7HcpO9KAaDLFzFGNxWdGdN3YTXhhWUqCsLAx9I6LxPzmRuUPsMNqTgrw==
+react-spring@^9.4.4, react-spring@^9.5.5:
+ version "9.5.5"
+ resolved "https://registry.yarnpkg.com/react-spring/-/react-spring-9.5.5.tgz#314009a65efc04d0ef157d3d60590dbb9de65f3c"
+ integrity sha512-vMGVd2yjgxWcRCzoLn9AD1d24+WpunHBRg5DoehcRdiBocaOH6qgle0xN9C5LPplXfv4yIpS5QWGN5MKrWxSZg==
dependencies:
- "@react-spring/core" "~9.5.2"
- "@react-spring/konva" "~9.5.2"
- "@react-spring/native" "~9.5.2"
- "@react-spring/three" "~9.5.2"
- "@react-spring/web" "~9.5.2"
- "@react-spring/zdog" "~9.5.2"
+ "@react-spring/core" "~9.5.5"
+ "@react-spring/konva" "~9.5.5"
+ "@react-spring/native" "~9.5.5"
+ "@react-spring/three" "~9.5.5"
+ "@react-spring/web" "~9.5.5"
+ "@react-spring/zdog" "~9.5.5"
react-tooltip@^4.2.21:
- version "4.2.21"
- resolved "https://registry.npmjs.org/react-tooltip/-/react-tooltip-4.2.21.tgz"
- integrity sha512-zSLprMymBDowknr0KVDiJ05IjZn9mQhhg4PRsqln0OZtURAJ1snt1xi5daZfagsh6vfsziZrc9pErPTDY1ACig==
+ version "4.5.1"
+ resolved "https://registry.yarnpkg.com/react-tooltip/-/react-tooltip-4.5.1.tgz#77eccccdf16adec804132e558ec20ca5783b866a"
+ integrity sha512-Zo+CSFUGXar1uV+bgXFFDe7VeS2iByeIp5rTgTcc2HqtuOS5D76QapejNNfx320MCY91TlhTQat36KGFTqgcvw==
dependencies:
- prop-types "^15.7.2"
+ prop-types "^15.8.1"
uuid "^7.0.3"
react-use-measure@^2.0.4:
@@ -5579,20 +6427,19 @@ react-use-measure@^2.0.4:
debounce "^1.2.1"
react-window@^1.8.6:
- version "1.8.7"
- resolved "https://registry.npmjs.org/react-window/-/react-window-1.8.7.tgz"
- integrity sha512-JHEZbPXBpKMmoNO1bNhoXOOLg/ujhL/BU4IqVU9r8eQPcy5KQnGHIHDRkJ0ns9IM5+Aq5LNwt3j8t3tIrePQzA==
+ version "1.8.8"
+ resolved "https://registry.yarnpkg.com/react-window/-/react-window-1.8.8.tgz#1b52919f009ddf91970cbdb2050a6c7be44df243"
+ integrity sha512-D4IiBeRtGXziZ1n0XklnFGu7h9gU684zepqyKzgPNzrsrk7xOCxni+TCckjg2Nr/DiaEEGVVmnhYSlT2rB47dQ==
dependencies:
"@babel/runtime" "^7.0.0"
memoize-one ">=3.1.1 <6"
-react@^17.0.0:
- version "17.0.2"
- resolved "https://registry.npmjs.org/react/-/react-17.0.2.tgz"
- integrity sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==
+react@^18.2.0:
+ version "18.2.0"
+ resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5"
+ integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==
dependencies:
loose-envify "^1.1.0"
- object-assign "^4.1.1"
read-babelrc-up@^1.1.0:
version "1.1.0"
@@ -5637,6 +6484,22 @@ read-pkg@^5.2.0:
parse-json "^5.0.0"
type-fest "^0.6.0"
+readable-stream@^3.1.1, readable-stream@^3.4.0:
+ version "3.6.0"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198"
+ integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==
+ dependencies:
+ inherits "^2.0.3"
+ string_decoder "^1.1.1"
+ util-deprecate "^1.0.1"
+
+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"
+
redent@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f"
@@ -5647,27 +6510,39 @@ redent@^3.0.0:
redis-errors@^1.0.0, redis-errors@^1.2.0:
version "1.2.0"
- resolved "https://registry.yarnpkg.com/redis-errors/-/redis-errors-1.2.0.tgz#eb62d2adb15e4eaf4610c04afe1529384250abad"
+ resolved "https://registry.npmjs.org/redis-errors/-/redis-errors-1.2.0.tgz"
integrity sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w==
redis-parser@^3.0.0:
version "3.0.0"
- resolved "https://registry.yarnpkg.com/redis-parser/-/redis-parser-3.0.0.tgz#b66d828cdcafe6b4b8a428a7def4c6bcac31c8b4"
+ resolved "https://registry.npmjs.org/redis-parser/-/redis-parser-3.0.0.tgz"
integrity sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A==
dependencies:
redis-errors "^1.0.0"
+redis@^4.5.0:
+ version "4.5.1"
+ resolved "https://registry.yarnpkg.com/redis/-/redis-4.5.1.tgz#f5a818970bb2dc5d60540bab41308640604c7d33"
+ integrity sha512-oxXSoIqMJCQVBTfxP6BNTCtDMyh9G6Vi5wjdPdV/sRKkufyZslDqCScSGcOr6XGR/reAWZefz7E4leM31RgdBA==
+ dependencies:
+ "@redis/bloom" "1.1.0"
+ "@redis/client" "1.4.2"
+ "@redis/graph" "1.1.0"
+ "@redis/json" "1.0.4"
+ "@redis/search" "1.1.0"
+ "@redis/time-series" "1.0.4"
+
redux@^4.0.0, redux@^4.0.4:
version "4.2.0"
- resolved "https://registry.npmjs.org/redux/-/redux-4.2.0.tgz"
+ resolved "https://registry.yarnpkg.com/redux/-/redux-4.2.0.tgz#46f10d6e29b6666df758780437651eeb2b969f13"
integrity sha512-oSBmcKKIuIR4ME29/AeNUnl5L+hvBq7OaJWzaptTQJAntaPvxIJqfnjbaEiCzzaIz+XmVILfqAM3Ob0aXLPfjA==
dependencies:
"@babel/runtime" "^7.9.2"
-regenerate-unicode-properties@^10.0.1:
- version "10.0.1"
- resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz#7f442732aa7934a3740c779bb9b3340dccc1fb56"
- integrity sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw==
+regenerate-unicode-properties@^10.1.0:
+ version "10.1.0"
+ resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz#7c3192cab6dd24e21cb4461e5ddd7dd24fa8374c"
+ integrity sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==
dependencies:
regenerate "^1.4.2"
@@ -5683,10 +6558,10 @@ regenerate@^1.4.0, regenerate@^1.4.2:
resolved "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz"
integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==
-regenerator-runtime@^0.13.4:
- version "0.13.9"
- resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52"
- integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==
+regenerator-runtime@^0.13.10, regenerator-runtime@^0.13.11:
+ version "0.13.11"
+ resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9"
+ integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==
regenerator-transform@^0.15.0:
version "0.15.0"
@@ -5695,7 +6570,12 @@ regenerator-transform@^0.15.0:
dependencies:
"@babel/runtime" "^7.8.4"
-regexp.prototype.flags@^1.4.1, regexp.prototype.flags@^1.4.3:
+regexp-tree@^0.1.24:
+ version "0.1.24"
+ resolved "https://registry.yarnpkg.com/regexp-tree/-/regexp-tree-0.1.24.tgz#3d6fa238450a4d66e5bc9c4c14bb720e2196829d"
+ integrity sha512-s2aEVuLhvnVJW6s/iPgEGK6R+/xngd2jNQ+xy4bXNDKxZKJH6jpPHY6kVeVv1IeLCHgswRj+Kl3ELaDjG6V1iw==
+
+regexp.prototype.flags@^1.4.3:
version "1.4.3"
resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz#87cab30f80f66660181a3bb7bf5981a872b367ac"
integrity sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==
@@ -5722,14 +6602,14 @@ regexpu-core@4.5.4:
unicode-match-property-value-ecmascript "^1.1.0"
regexpu-core@^5.1.0:
- version "5.1.0"
- resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.1.0.tgz#2f8504c3fd0ebe11215783a41541e21c79942c6d"
- integrity sha512-bb6hk+xWd2PEOkj5It46A16zFMs2mv86Iwpdu94la4S3sJ7C973h2dHpYKwIBGaWSO7cIRJ+UX0IeMaWcO4qwA==
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.2.1.tgz#a69c26f324c1e962e9ffd0b88b055caba8089139"
+ integrity sha512-HrnlNtpvqP1Xkb28tMhBUO2EbyUHdQlsnlAhzWcwHy8WJR53UWr7/MAvqrsQKMbV4qdpv03oTMG8iIhfsPFktQ==
dependencies:
regenerate "^1.4.2"
- regenerate-unicode-properties "^10.0.1"
- regjsgen "^0.6.0"
- regjsparser "^0.8.2"
+ regenerate-unicode-properties "^10.1.0"
+ regjsgen "^0.7.1"
+ regjsparser "^0.9.1"
unicode-match-property-ecmascript "^2.0.0"
unicode-match-property-value-ecmascript "^2.0.0"
@@ -5738,10 +6618,10 @@ regjsgen@^0.5.0:
resolved "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz"
integrity sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==
-regjsgen@^0.6.0:
- version "0.6.0"
- resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.6.0.tgz#83414c5354afd7d6627b16af5f10f41c4e71808d"
- integrity sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA==
+regjsgen@^0.7.1:
+ version "0.7.1"
+ resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.7.1.tgz#ee5ef30e18d3f09b7c369b76e7c2373ed25546f6"
+ integrity sha512-RAt+8H2ZEzHeYWxZ3H2z6tF18zyyOnlcdaafLrm21Bguj7uZy6ULibiAFdXEtKQY4Sy7wDTwDiOazasMLc4KPA==
regjsparser@^0.6.0:
version "0.6.9"
@@ -5750,21 +6630,21 @@ regjsparser@^0.6.0:
dependencies:
jsesc "~0.5.0"
-regjsparser@^0.8.2:
- version "0.8.4"
- resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.8.4.tgz#8a14285ffcc5de78c5b95d62bbf413b6bc132d5f"
- integrity sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA==
+regjsparser@^0.9.1:
+ version "0.9.1"
+ resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.9.1.tgz#272d05aa10c7c1f67095b1ff0addae8442fc5709"
+ integrity sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==
dependencies:
jsesc "~0.5.0"
request-ip@^3.3.0:
version "3.3.0"
- resolved "https://registry.yarnpkg.com/request-ip/-/request-ip-3.3.0.tgz#863451e8fec03847d44f223e30a5d63e369fa611"
+ resolved "https://registry.npmjs.org/request-ip/-/request-ip-3.3.0.tgz"
integrity sha512-cA6Xh6e0fDBBBwH77SLJaJPBmD3nWVAcF9/XAcsrIHdjhFzFiB5aNQFytdjCGPezU3ROwrR11IddKAM08vohxA==
request@2.88.0:
version "2.88.0"
- resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef"
+ resolved "https://registry.npmjs.org/request/-/request-2.88.0.tgz"
integrity sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==
dependencies:
aws-sign2 "~0.7.0"
@@ -5866,15 +6746,15 @@ rollup-plugin-terser@^7.0.2:
terser "^5.0.0"
rollup@^2.70.1:
- version "2.78.1"
- resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.78.1.tgz#52fe3934d9c83cb4f7c4cb5fb75d88591be8648f"
- integrity sha512-VeeCgtGi4P+o9hIg+xz4qQpRl6R401LWEXBmxYKOV4zlF82lyhgh2hTZnheFUbANE8l2A41F458iwj2vEYaXJg==
+ version "2.79.1"
+ resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.79.1.tgz#bedee8faef7c9f93a2647ac0108748f497f081c7"
+ integrity sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==
optionalDependencies:
fsevents "~2.3.2"
rtlcss@^3.5.0:
version "3.5.0"
- resolved "https://registry.yarnpkg.com/rtlcss/-/rtlcss-3.5.0.tgz#c9eb91269827a102bac7ae3115dd5d049de636c3"
+ resolved "https://registry.npmjs.org/rtlcss/-/rtlcss-3.5.0.tgz"
integrity sha512-wzgMaMFHQTnyi9YOwsx9LjOxYXJPzS8sYnFaKm6R5ysvTkwzHiB0vxnbHwchHQT65PTdBjDG21/kQBWI7q9O7A==
dependencies:
find-up "^5.0.0"
@@ -5896,28 +6776,31 @@ rxjs@^7.5.1:
dependencies:
tslib "^2.1.0"
-safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.2:
+safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.2, safe-buffer@~5.2.0:
version "5.2.1"
- resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
+ resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz"
integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
-safe-buffer@~5.1.1:
- version "5.1.2"
- resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
- integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
+safe-regex-test@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295"
+ integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==
+ dependencies:
+ call-bind "^1.0.2"
+ get-intrinsic "^1.1.3"
+ is-regex "^1.1.4"
safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0:
version "2.1.2"
- resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
+ resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz"
integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
-scheduler@^0.20.2:
- version "0.20.2"
- resolved "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz"
- integrity sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==
+scheduler@^0.23.0:
+ version "0.23.0"
+ resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.0.tgz#ba8041afc3d30eb206a487b6b384002e4e61fdfe"
+ integrity sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==
dependencies:
loose-envify "^1.1.0"
- object-assign "^4.1.1"
schema-utils@*:
version "4.0.0"
@@ -5938,6 +6821,13 @@ schema-utils@^2.6.6:
ajv "^6.12.4"
ajv-keywords "^3.5.2"
+selfsigned@^2.0.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-2.1.1.tgz#18a7613d714c0cd3385c48af0075abf3f266af61"
+ integrity sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==
+ dependencies:
+ node-forge "^1"
+
semver-compare@^1.0.0:
version "1.0.0"
resolved "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz"
@@ -5948,11 +6838,6 @@ semver-compare@^1.0.0:
resolved "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz"
integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
-semver@7.0.0:
- version "7.0.0"
- resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e"
- integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==
-
semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0:
version "6.3.0"
resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
@@ -5965,10 +6850,10 @@ semver@^7.2.1:
dependencies:
lru-cache "^6.0.0"
-semver@^7.3.4, semver@^7.3.6, semver@^7.3.7:
- version "7.3.7"
- resolved "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz"
- integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==
+semver@^7.3.4, semver@^7.3.5, semver@^7.3.6, semver@^7.3.7:
+ version "7.3.8"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798"
+ integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==
dependencies:
lru-cache "^6.0.0"
@@ -5979,6 +6864,20 @@ serialize-javascript@^4.0.0:
dependencies:
randombytes "^2.1.0"
+sharp@^0.30.7:
+ version "0.30.7"
+ resolved "https://registry.yarnpkg.com/sharp/-/sharp-0.30.7.tgz#7862bda98804fdd1f0d5659c85e3324b90d94c7c"
+ integrity sha512-G+MY2YW33jgflKPTXXptVO28HvNOo9G3j0MybYAHeEmby+QuD2U98dT6ueht9cv/XDqZspSpIhoSW+BAKJ7Hig==
+ dependencies:
+ color "^4.2.3"
+ detect-libc "^2.0.1"
+ node-addon-api "^5.0.0"
+ prebuild-install "^7.1.1"
+ semver "^7.3.7"
+ simple-get "^4.0.1"
+ tar-fs "^2.1.1"
+ tunnel-agent "^0.6.0"
+
shebang-command@^1.2.0:
version "1.2.0"
resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz"
@@ -6022,6 +6921,27 @@ signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7:
resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz"
integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==
+simple-concat@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f"
+ integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==
+
+simple-get@^4.0.0, simple-get@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-4.0.1.tgz#4a39db549287c979d352112fa03fd99fd6bc3543"
+ integrity sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==
+ dependencies:
+ decompress-response "^6.0.0"
+ once "^1.3.1"
+ simple-concat "^1.0.0"
+
+simple-swizzle@^0.2.2:
+ version "0.2.2"
+ resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a"
+ integrity sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==
+ dependencies:
+ is-arrayish "^0.3.1"
+
sisteransi@^1.0.5:
version "1.0.5"
resolved "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz"
@@ -6113,7 +7033,7 @@ sprintf-js@~1.0.2:
sshpk@^1.7.0:
version "1.17.0"
- resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.17.0.tgz#578082d92d4fe612b13007496e543fa0fbcbe4c5"
+ resolved "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz"
integrity sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==
dependencies:
asn1 "~0.2.3"
@@ -6133,14 +7053,19 @@ stable@^0.1.8:
standard-as-callback@^2.1.0:
version "2.1.0"
- resolved "https://registry.yarnpkg.com/standard-as-callback/-/standard-as-callback-2.1.0.tgz#8953fc05359868a77b5b9739a665c5977bb7df45"
+ resolved "https://registry.npmjs.org/standard-as-callback/-/standard-as-callback-2.1.0.tgz"
integrity sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A==
stream2asynciter@1.0.3:
version "1.0.3"
- resolved "https://registry.yarnpkg.com/stream2asynciter/-/stream2asynciter-1.0.3.tgz#7ba9046846c8b1caf36ec30d64a73514f7f44c5a"
+ resolved "https://registry.npmjs.org/stream2asynciter/-/stream2asynciter-1.0.3.tgz"
integrity sha512-9/dEZW+LQjuW6ub5hmWi4n9Pn8W8qA8k7NAE1isecesA164e73xTdy1CJ3S9o9YS+O21HuiK7T+4uS7FgKDy4w==
+streamsearch@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-1.1.0.tgz#404dd1e2247ca94af554e841a8ef0eaa238da764"
+ integrity sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==
+
string-argv@0.3.1:
version "0.3.1"
resolved "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz"
@@ -6155,18 +7080,18 @@ string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3:
is-fullwidth-code-point "^3.0.0"
strip-ansi "^6.0.1"
-string.prototype.matchall@^4.0.7:
- version "4.0.7"
- resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.7.tgz#8e6ecb0d8a1fb1fda470d81acecb2dba057a481d"
- integrity sha512-f48okCX7JiwVi1NXCVWcFnZgADDC/n2vePlQ/KUCNqCikLLilQvwjMO8+BHVKvgzH0JB0J9LEPgxOGT02RoETg==
+string.prototype.matchall@^4.0.8:
+ version "4.0.8"
+ resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz#3bf85722021816dcd1bf38bb714915887ca79fd3"
+ integrity sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==
dependencies:
call-bind "^1.0.2"
- define-properties "^1.1.3"
- es-abstract "^1.19.1"
- get-intrinsic "^1.1.1"
+ define-properties "^1.1.4"
+ es-abstract "^1.20.4"
+ get-intrinsic "^1.1.3"
has-symbols "^1.0.3"
internal-slot "^1.0.3"
- regexp.prototype.flags "^1.4.1"
+ regexp.prototype.flags "^1.4.3"
side-channel "^1.0.4"
string.prototype.padend@^3.0.0:
@@ -6179,22 +7104,29 @@ string.prototype.padend@^3.0.0:
es-abstract "^1.19.1"
string.prototype.trimend@^1.0.5:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz#914a65baaab25fbdd4ee291ca7dde57e869cb8d0"
- integrity sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==
+ 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==
dependencies:
call-bind "^1.0.2"
define-properties "^1.1.4"
- es-abstract "^1.19.5"
+ es-abstract "^1.20.4"
string.prototype.trimstart@^1.0.5:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz#5466d93ba58cfa2134839f81d7f42437e8c01fef"
- integrity sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz#e90ab66aa8e4007d92ef591bbf3cd422c56bdcf4"
+ integrity sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==
dependencies:
call-bind "^1.0.2"
define-properties "^1.1.4"
- es-abstract "^1.19.5"
+ es-abstract "^1.20.4"
+
+string_decoder@^1.1.1:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e"
+ integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==
+ dependencies:
+ safe-buffer "~5.2.0"
stringify-object@3.3.0:
version "3.3.0"
@@ -6224,7 +7156,7 @@ strip-bom@^4.0.0:
strip-final-newline@^2.0.0:
version "2.0.0"
- resolved "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz"
+ resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad"
integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==
strip-indent@^3.0.0:
@@ -6239,15 +7171,20 @@ strip-json-comments@^3.1.0, strip-json-comments@^3.1.1:
resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz"
integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==
+strip-json-comments@~2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
+ integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==
+
style-search@^0.1.0:
version "0.1.0"
resolved "https://registry.yarnpkg.com/style-search/-/style-search-0.1.0.tgz#7958c793e47e32e07d2b5cafe5c0bf8e12e77902"
integrity sha512-Dj1Okke1C3uKKwQcetra4jSuk0DqbzbYtXipzFlFMZtowbF1x7BKJwB9AayVMyFARvU8EDrZdcax4At/452cAg==
-styled-jsx@5.0.4:
- version "5.0.4"
- resolved "https://registry.yarnpkg.com/styled-jsx/-/styled-jsx-5.0.4.tgz#5b1bd0b9ab44caae3dd1361295559706e044aa53"
- integrity sha512-sDFWLbg4zR+UkNzfk5lPilyIgtpddfxXEULxhujorr5jtePTUqiPDc5BC0v1NRqTr/WaFBGQQUoYToGlF4B2KQ==
+styled-jsx@5.0.7:
+ version "5.0.7"
+ resolved "https://registry.yarnpkg.com/styled-jsx/-/styled-jsx-5.0.7.tgz#be44afc53771b983769ac654d355ca8d019dff48"
+ integrity sha512-b3sUzamS086YLRuvnaDigdAewz1/EFYlHpYBP5mZovKEdQQOIIYq8lApylub3HHZ6xFjV051kkGU7cudJmrXEA==
stylelint-config-css-modules@^4.1.0:
version "4.1.0"
@@ -6257,9 +7194,9 @@ stylelint-config-css-modules@^4.1.0:
stylelint-scss "^4.2.0"
stylelint-config-prettier@^9.0.3:
- version "9.0.3"
- resolved "https://registry.npmjs.org/stylelint-config-prettier/-/stylelint-config-prettier-9.0.3.tgz"
- integrity sha512-5n9gUDp/n5tTMCq1GLqSpA30w2sqWITSSEiAWQlpxkKGAUbjcemQ0nbkRvRUa0B1LgD3+hCvdL7B1eTxy1QHJg==
+ version "9.0.4"
+ 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"
@@ -6278,17 +7215,17 @@ stylelint-scss@^4.2.0:
postcss-value-parser "^4.1.0"
stylelint@^14.5.3:
- version "14.11.0"
- resolved "https://registry.yarnpkg.com/stylelint/-/stylelint-14.11.0.tgz#e2ecb28bbacab05e1fbeb84cbba23883b27499cc"
- integrity sha512-OTLjLPxpvGtojEfpESWM8Ir64Z01E89xsisaBMUP/ngOx1+4VG2DPRcUyCCiin9Rd3kPXPsh/uwHd9eqnvhsYA==
+ version "14.15.0"
+ resolved "https://registry.yarnpkg.com/stylelint/-/stylelint-14.15.0.tgz#4df55078e734869f81f6b85bbec2d56a4b478ece"
+ integrity sha512-JOgDAo5QRsqiOZPZO+B9rKJvBm64S0xasbuRPAbPs6/vQDgDCnZLIiw6XcAS6GQKk9k1sBWR6rmH3Mfj8OknKg==
dependencies:
"@csstools/selector-specificity" "^2.0.2"
balanced-match "^2.0.0"
colord "^2.9.3"
- cosmiconfig "^7.0.1"
+ cosmiconfig "^7.1.0"
css-functions-list "^3.1.0"
debug "^4.3.4"
- fast-glob "^3.2.11"
+ fast-glob "^3.2.12"
fastest-levenshtein "^1.0.16"
file-entry-cache "^6.0.1"
global-modules "^2.0.0"
@@ -6299,13 +7236,13 @@ stylelint@^14.5.3:
import-lazy "^4.0.0"
imurmurhash "^0.1.4"
is-plain-object "^5.0.0"
- known-css-properties "^0.25.0"
+ known-css-properties "^0.26.0"
mathml-tag-names "^2.1.3"
meow "^9.0.0"
micromatch "^4.0.5"
normalize-path "^3.0.0"
picocolors "^1.0.0"
- postcss "^8.4.16"
+ postcss "^8.4.19"
postcss-media-query-parser "^0.2.3"
postcss-resolve-nested-selector "^0.1.1"
postcss-safe-parser "^6.0.0"
@@ -6315,9 +7252,9 @@ stylelint@^14.5.3:
string-width "^4.2.3"
strip-ansi "^6.0.1"
style-search "^0.1.0"
- supports-hyperlinks "^2.2.0"
+ supports-hyperlinks "^2.3.0"
svg-tags "^1.0.0"
- table "^6.8.0"
+ table "^6.8.1"
v8-compile-cache "^2.3.0"
write-file-atomic "^4.0.2"
@@ -6337,15 +7274,15 @@ supports-color@^5.3.0:
supports-color@^7.0.0, supports-color@^7.1.0:
version "7.2.0"
- resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da"
integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==
dependencies:
has-flag "^4.0.0"
-supports-hyperlinks@^2.2.0:
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz#4f77b42488765891774b70c79babd87f9bd594bb"
- integrity sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==
+supports-hyperlinks@^2.3.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz#3943544347c1ff90b15effb03fc14ae45ec10624"
+ integrity sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==
dependencies:
has-flag "^4.0.0"
supports-color "^7.0.0"
@@ -6378,7 +7315,7 @@ svgo@^2.8.0:
picocolors "^1.0.0"
stable "^0.1.8"
-table@^6.0.9, table@^6.8.0:
+table@^6.0.9:
version "6.8.0"
resolved "https://registry.npmjs.org/table/-/table-6.8.0.tgz"
integrity sha512-s/fitrbVeEyHKFa7mFdkuQMWlH1Wgw/yEXMt5xACT4ZpzWFluehAxRtUUQKPuWhaLAWhFcVx6w3oC8VKaUfPGA==
@@ -6389,10 +7326,42 @@ table@^6.0.9, table@^6.8.0:
string-width "^4.2.3"
strip-ansi "^6.0.1"
+table@^6.8.1:
+ version "6.8.1"
+ resolved "https://registry.yarnpkg.com/table/-/table-6.8.1.tgz#ea2b71359fe03b017a5fbc296204471158080bdf"
+ integrity sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==
+ dependencies:
+ ajv "^8.0.1"
+ lodash.truncate "^4.4.2"
+ slice-ansi "^4.0.0"
+ string-width "^4.2.3"
+ strip-ansi "^6.0.1"
+
+tar-fs@^2.0.0, tar-fs@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.1.tgz#489a15ab85f1f0befabb370b7de4f9eb5cbe8784"
+ integrity sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==
+ dependencies:
+ chownr "^1.1.1"
+ mkdirp-classic "^0.5.2"
+ pump "^3.0.0"
+ tar-stream "^2.1.4"
+
+tar-stream@^2.1.4:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287"
+ integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==
+ dependencies:
+ bl "^4.0.3"
+ end-of-stream "^1.4.1"
+ fs-constants "^1.0.0"
+ inherits "^2.0.3"
+ readable-stream "^3.1.1"
+
tar@^6.1.2:
- version "6.1.11"
- resolved "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz"
- integrity sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==
+ version "6.1.12"
+ resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.12.tgz#3b742fb05669b55671fb769ab67a7791ea1a62e6"
+ integrity sha512-jU4TdemS31uABHd+Lt5WEYJuzn+TJTCBLljvIAHZOz6M9Os5pJ4dD+vRFLxPa/n3T0iEFzpi+0x1UfuDZYbRMw==
dependencies:
chownr "^2.0.0"
fs-minipass "^2.0.0"
@@ -6423,7 +7392,7 @@ thenby@^1.3.4:
through@2.3.8, "through@>=2.2.7 <3", through@^2.3.8:
version "2.3.8"
- resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
+ resolved "https://registry.npmjs.org/through/-/through-2.3.8.tgz"
integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==
timezone-support@^2.0.2:
@@ -6433,15 +7402,23 @@ timezone-support@^2.0.2:
dependencies:
commander "2.20.0"
-tiny-invariant@^1.0.6:
- version "1.2.0"
- resolved "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.2.0.tgz"
- integrity sha512-1Uhn/aqw5C6RI4KejVeTg6mIS7IqxnLJ8Mv2tV5rTc0qWobay7pDUz6Wi392Cnc8ak1H0F2cjoRzb2/AW4+Fvg==
+tiny-glob@^0.2.9:
+ version "0.2.9"
+ resolved "https://registry.yarnpkg.com/tiny-glob/-/tiny-glob-0.2.9.tgz#2212d441ac17928033b110f8b3640683129d31e2"
+ integrity sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==
+ dependencies:
+ globalyzer "0.1.0"
+ globrex "^0.1.2"
-tiny-lru@8.0.2:
- version "8.0.2"
- resolved "https://registry.npmjs.org/tiny-lru/-/tiny-lru-8.0.2.tgz"
- integrity sha512-ApGvZ6vVvTNdsmt676grvCkUCGwzG9IqXma5Z07xJgiC5L7akUMof5U8G2JTI9Rz/ovtVhJBlY6mNhEvtjzOIg==
+tiny-invariant@^1.0.6:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.3.1.tgz#8560808c916ef02ecfd55e66090df23a4b7aa642"
+ integrity sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==
+
+tiny-lru@9.0.3:
+ version "9.0.3"
+ resolved "https://registry.yarnpkg.com/tiny-lru/-/tiny-lru-9.0.3.tgz#f6a2121f433607a7f338881a23090829c1ea8cae"
+ integrity sha512-/i9GruRjXsnDgehxvy6iZ4AFNVxngEFbwzirhdulomMNPGPVV3ECMZOWSw0w4sRMZ9Al9m4jy08GPvRxRUGYlw==
tiny-warning@^1.0.2:
version "1.0.3"
@@ -6469,12 +7446,17 @@ topojson-client@^3.1.0:
tough-cookie@~2.4.3:
version "2.4.3"
- resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781"
+ resolved "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz"
integrity sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==
dependencies:
psl "^1.1.24"
punycode "^1.4.1"
+tr46@~0.0.3:
+ version "0.0.3"
+ resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a"
+ integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==
+
trim-newlines@^3.0.0:
version "3.0.1"
resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-3.0.1.tgz#260a5d962d8b752425b32f3a7db0dcacd176c144"
@@ -6495,11 +7477,16 @@ tslib@^1.10.0, tslib@^1.8.1:
resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz"
integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
-tslib@^2.0.1, tslib@^2.1.0, tslib@^2.4.0:
+tslib@^2.0.1, tslib@^2.1.0:
version "2.4.0"
resolved "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz"
integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==
+tslib@^2.4.0:
+ version "2.4.1"
+ resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.1.tgz#0d0bfbaac2880b91e22df0768e55be9753a5b17e"
+ integrity sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==
+
tsutils@^3.21.0:
version "3.21.0"
resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623"
@@ -6509,7 +7496,7 @@ tsutils@^3.21.0:
tsv@0.2.0:
version "0.2.0"
- resolved "https://registry.yarnpkg.com/tsv/-/tsv-0.2.0.tgz#92869a3cb5f50332f3dc90fca82be667db6f72d6"
+ resolved "https://registry.npmjs.org/tsv/-/tsv-0.2.0.tgz"
integrity sha512-GG6xbOP85giXXom0dS6z9uyDsxktznjpa1AuDlPrIXDqDnbhjr9Vk6Us8iz6U1nENL4CPS2jZDvIjEdaZsmc4Q==
tunnel-agent@^0.6.0:
@@ -6521,7 +7508,7 @@ tunnel-agent@^0.6.0:
tweetnacl@^0.14.3, tweetnacl@~0.14.0:
version "0.14.5"
- resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"
+ resolved "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz"
integrity sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==
type-check@^0.4.0, type-check@~0.4.0:
@@ -6578,6 +7565,11 @@ typescript@^4.5:
resolved "https://registry.npmjs.org/typescript/-/typescript-4.7.2.tgz"
integrity sha512-Mamb1iX2FDUpcTRzltPxgWMKy3fhg0TN378ylbktPGPK/99KbDtMQ4W1hwgsbPAsG3a0xKa1vmw4VKZQbkvz5A==
+ufo@^0.8.0, ufo@^0.8.5, ufo@^0.8.6:
+ version "0.8.6"
+ resolved "https://registry.yarnpkg.com/ufo/-/ufo-0.8.6.tgz#c0ec89bc0e0c9fa59a683680feb0f28b55ec323b"
+ integrity sha512-fk6CmUgwKCfX79EzcDQQpSCMxrHstvbLswFChHS0Vump+kFkw7nJBfTZoC1j0bOGoY9I7R3n2DGek5ajbcYnOw==
+
unbox-primitive@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e"
@@ -6588,6 +7580,13 @@ unbox-primitive@^1.0.2:
has-symbols "^1.0.3"
which-boxed-primitive "^1.0.2"
+undici@^5.12.0:
+ version "5.12.0"
+ resolved "https://registry.yarnpkg.com/undici/-/undici-5.12.0.tgz#c758ffa704fbcd40d506e4948860ccaf4099f531"
+ integrity sha512-zMLamCG62PGjd9HHMpo05bSLvvwWOZgGeiWlN/vlqu3+lRo3elxktVGEyLMX+IO7c2eflLjcW74AlkhEZm15mg==
+ dependencies:
+ busboy "^1.6.0"
+
unicode-canonical-property-names-ecmascript@^1.0.4:
version "1.0.4"
resolved "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz"
@@ -6630,19 +7629,36 @@ unicode-property-aliases-ecmascript@^1.0.4:
integrity sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==
unicode-property-aliases-ecmascript@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz#0a36cb9a585c4f6abd51ad1deddb285c165297c8"
- integrity sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz#43d41e3be698bd493ef911077c9b131f827e8ccd"
+ integrity sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==
universalify@^2.0.0:
version "2.0.0"
- resolved "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz"
+ resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717"
integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==
-update-browserslist-db@^1.0.5:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.5.tgz#be06a5eedd62f107b7c19eb5bcefb194411abf38"
- integrity sha512-dteFFpCyvuDdr9S/ff1ISkKt/9YZxKjI9WlRR99c180GaztJtRa/fn18FdxGVKVsnPY7/a/FDN68mcvUmP4U7Q==
+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==
+ 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"
+ mkdir "^0.0.2"
+ mri "^1.2.0"
+ ohmyfetch "^0.4.19"
+ ufo "^0.8.6"
+ ws "^8.9.0"
+
+update-browserslist-db@^1.0.9:
+ version "1.0.10"
+ resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz#0f54b876545726f17d00cd9a2561e6dade943ff3"
+ integrity sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==
dependencies:
escalade "^3.1.1"
picocolors "^1.0.0"
@@ -6655,28 +7671,28 @@ uri-js@^4.2.2:
punycode "^2.1.0"
use-memo-one@^1.1.1:
- version "1.1.2"
- resolved "https://registry.npmjs.org/use-memo-one/-/use-memo-one-1.1.2.tgz"
- integrity sha512-u2qFKtxLsia/r8qG0ZKkbytbztzRb317XCkT7yP8wxL0tZ/CzK2G+WWie5vWvpyeP7+YoPIwbJoIHJ4Ba4k0oQ==
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/use-memo-one/-/use-memo-one-1.1.3.tgz#2fd2e43a2169eabc7496960ace8c79efef975e99"
+ integrity sha512-g66/K7ZQGYrI6dy8GLpVcMsBp4s17xNkYJVSMvTEevGy3nDxHOfE6z8BVE22+5G5x7t3+bhzrlTDB7ObrEE0cQ==
-use-sync-external-store@1.2.0:
+use-sync-external-store@1.2.0, use-sync-external-store@^1.2.0:
version "1.2.0"
- resolved "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz"
+ resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz#7dbefd6ef3fe4e767a0cf5d7287aacfb5846928a"
integrity sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==
-util-deprecate@^1.0.2:
+util-deprecate@^1.0.1, 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@3.4.0, uuid@^3.3.2:
version "3.4.0"
- resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee"
+ resolved "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz"
integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==
uuid@^7.0.3:
version "7.0.3"
- resolved "https://registry.npmjs.org/uuid/-/uuid-7.0.3.tgz"
+ resolved "https://registry.yarnpkg.com/uuid/-/uuid-7.0.3.tgz#c5c9f2c8cf25dc0a372c4df1441c41f5bd0c680b"
integrity sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg==
uuid@^8.3.2:
@@ -6704,7 +7720,7 @@ vary@^1:
verror@1.10.0:
version "1.10.0"
- resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400"
+ resolved "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz"
integrity sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==
dependencies:
assert-plus "^1.0.0"
@@ -6724,9 +7740,22 @@ vue@^3.2.23:
web-streams-polyfill@^3.0.3:
version "3.2.1"
- resolved "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz"
+ resolved "https://registry.yarnpkg.com/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz#71c2718c52b45fd49dbeee88634b3a60ceab42a6"
integrity sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==
+webidl-conversions@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871"
+ integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==
+
+whatwg-url@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d"
+ integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==
+ dependencies:
+ tr46 "~0.0.3"
+ webidl-conversions "^3.0.0"
+
which-boxed-primitive@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6"
@@ -6810,9 +7839,22 @@ write-json-file@^4.3.0:
sort-keys "^4.0.0"
write-file-atomic "^3.0.0"
-yallist@^4.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==
+
+xss@^1.0.14:
+ version "1.0.14"
+ resolved "https://registry.yarnpkg.com/xss/-/xss-1.0.14.tgz#4f3efbde75ad0d82e9921cc3c95e6590dd336694"
+ integrity sha512-og7TEJhXvn1a7kzZGQ7ETjdQVS2UfZyTlsEdDOqvQF7GoxNfY+0YLCzBy1kPdsDDx4QuNAonQPddpsn6Xl/7sw==
+ dependencies:
+ commander "^2.20.3"
+ cssfilter "0.0.10"
+
+yallist@4.0.0, yallist@^4.0.0:
version "4.0.0"
- resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz"
+ resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
yaml@^1.10.0: