commit
ce35a2d0ab
|
@ -1,17 +1,15 @@
|
||||||
import React, { useState, useMemo } from 'react';
|
import React, { useState, useMemo } from 'react';
|
||||||
|
import { useRouter } from 'next/router';
|
||||||
import PropTypes from 'prop-types';
|
import PropTypes from 'prop-types';
|
||||||
import ReactTooltip from 'react-tooltip';
|
import ReactTooltip from 'react-tooltip';
|
||||||
import { ComposableMap, Geographies, Geography, ZoomableGroup } from 'react-simple-maps';
|
import { ComposableMap, Geographies, Geography, ZoomableGroup } from 'react-simple-maps';
|
||||||
import classNames from 'classnames';
|
import classNames from 'classnames';
|
||||||
import tinycolor from 'tinycolor2';
|
import tinycolor from 'tinycolor2';
|
||||||
import useTheme from 'hooks/useTheme';
|
import useTheme from 'hooks/useTheme';
|
||||||
import { THEME_COLORS } from 'lib/constants';
|
import { ISO_COUNTRIES, THEME_COLORS, MAP_FILE } from 'lib/constants';
|
||||||
import styles from './WorldMap.module.css';
|
import styles from './WorldMap.module.css';
|
||||||
import useCountryNames from 'hooks/useCountryNames';
|
import useCountryNames from 'hooks/useCountryNames';
|
||||||
import useLocale from 'hooks/useLocale';
|
import useLocale from 'hooks/useLocale';
|
||||||
import { useRouter } from 'next/router';
|
|
||||||
|
|
||||||
const geoUrl = '/world-110m.json';
|
|
||||||
|
|
||||||
function WorldMap({ data, className }) {
|
function WorldMap({ data, className }) {
|
||||||
const { basePath } = useRouter();
|
const { basePath } = useRouter();
|
||||||
|
@ -60,10 +58,10 @@ function WorldMap({ data, className }) {
|
||||||
>
|
>
|
||||||
<ComposableMap projection="geoMercator">
|
<ComposableMap projection="geoMercator">
|
||||||
<ZoomableGroup zoom={0.8} minZoom={0.7} center={[0, 40]}>
|
<ZoomableGroup zoom={0.8} minZoom={0.7} center={[0, 40]}>
|
||||||
<Geographies geography={`${basePath}${geoUrl}`}>
|
<Geographies geography={`${basePath}${MAP_FILE}`}>
|
||||||
{({ geographies }) => {
|
{({ geographies }) => {
|
||||||
return geographies.map(geo => {
|
return geographies.map(geo => {
|
||||||
const code = geo.properties.ISO_A2;
|
const code = ISO_COUNTRIES[geo.id];
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Geography
|
<Geography
|
||||||
|
|
|
@ -72,7 +72,7 @@ export default function WebsiteEditForm({ values, onSave, onClose }) {
|
||||||
<FormattedMessage id="label.domain" defaultMessage="Domain" />
|
<FormattedMessage id="label.domain" defaultMessage="Domain" />
|
||||||
</label>
|
</label>
|
||||||
<div>
|
<div>
|
||||||
<Field name="domain" type="text" />
|
<Field name="domain" type="text" placeholder="example.com" />
|
||||||
<FormError name="domain" />
|
<FormError name="domain" />
|
||||||
</div>
|
</div>
|
||||||
</FormRow>
|
</FormRow>
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
import React from 'react';
|
import React, { useState } from 'react';
|
||||||
import { FormattedMessage } from 'react-intl';
|
import { FormattedMessage } from 'react-intl';
|
||||||
import { useSelector } from 'react-redux';
|
import { useSelector } from 'react-redux';
|
||||||
import classNames from 'classnames';
|
import classNames from 'classnames';
|
||||||
|
@ -13,20 +13,43 @@ import styles from './Header.module.css';
|
||||||
|
|
||||||
export default function Header() {
|
export default function Header() {
|
||||||
const user = useSelector(state => state.user);
|
const user = useSelector(state => state.user);
|
||||||
|
const [active, setActive] = useState(false);
|
||||||
|
|
||||||
|
function handleClick() {
|
||||||
|
setActive(state => !state);
|
||||||
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<header className="container">
|
<nav className="container">
|
||||||
{user?.is_admin && <UpdateNotice />}
|
{user?.is_admin && <UpdateNotice />}
|
||||||
<div className={classNames(styles.header, 'row align-items-center')}>
|
<div className={classNames(styles.header, 'row align-items-center')}>
|
||||||
<div className="col-6 col-lg-3 order-1 order-lg-1">
|
<div className={styles.nav}>
|
||||||
|
<div className="">
|
||||||
<div className={styles.title}>
|
<div className={styles.title}>
|
||||||
<Icon icon={<Logo />} size="large" className={styles.logo} />
|
<Icon icon={<Logo />} size="large" className={styles.logo} />
|
||||||
<Link href={user ? '/' : 'https://umami.is'}>umami</Link>
|
<Link href={user ? '/' : 'https://umami.is'}>umami</Link>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div className="col-12 col-lg-6 order-3 order-lg-2">
|
<button
|
||||||
|
onClick={handleClick}
|
||||||
|
role="button"
|
||||||
|
className={styles.burger}
|
||||||
|
aria-label="menu"
|
||||||
|
aria-expanded="false"
|
||||||
|
>
|
||||||
|
{active ? (
|
||||||
|
<div> X </div>
|
||||||
|
) : (
|
||||||
|
<>
|
||||||
|
<span></span>
|
||||||
|
<span></span>
|
||||||
|
<span></span>
|
||||||
|
</>
|
||||||
|
)}
|
||||||
|
</button>
|
||||||
{user && (
|
{user && (
|
||||||
<div className={styles.nav}>
|
<div className={styles.items}>
|
||||||
|
<div className={active ? classNames(styles.active) : ''}>
|
||||||
<Link href="/dashboard">
|
<Link href="/dashboard">
|
||||||
<FormattedMessage id="label.dashboard" defaultMessage="Dashboard" />
|
<FormattedMessage id="label.dashboard" defaultMessage="Dashboard" />
|
||||||
</Link>
|
</Link>
|
||||||
|
@ -37,9 +60,10 @@ export default function Header() {
|
||||||
<FormattedMessage id="label.settings" defaultMessage="Settings" />
|
<FormattedMessage id="label.settings" defaultMessage="Settings" />
|
||||||
</Link>
|
</Link>
|
||||||
</div>
|
</div>
|
||||||
)}
|
|
||||||
</div>
|
</div>
|
||||||
<div className="col-6 col-lg-3 order-2 order-lg-3">
|
)}
|
||||||
|
<div className={styles.items}>
|
||||||
|
<div className={active ? classNames(styles.active) : ''}>
|
||||||
<div className={styles.buttons}>
|
<div className={styles.buttons}>
|
||||||
<ThemeButton />
|
<ThemeButton />
|
||||||
<LanguageButton menuAlign="right" />
|
<LanguageButton menuAlign="right" />
|
||||||
|
@ -47,6 +71,8 @@ export default function Header() {
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</header>
|
</div>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,19 @@
|
||||||
|
.navbar {
|
||||||
|
align-items: stretch;
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
justify-content: space-between;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.burger {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
.header {
|
.header {
|
||||||
display: flex;
|
display: flex;
|
||||||
min-height: 100px;
|
min-height: 100px;
|
||||||
|
width: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
.title {
|
.title {
|
||||||
|
@ -15,6 +28,15 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
.nav {
|
.nav {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
font-size: var(--font-size-normal);
|
||||||
|
font-weight: 600;
|
||||||
|
width: 100%;
|
||||||
|
justify-content: space-between;
|
||||||
|
}
|
||||||
|
|
||||||
|
.items {
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
|
@ -35,16 +57,75 @@
|
||||||
@media only screen and (max-width: 992px) {
|
@media only screen and (max-width: 992px) {
|
||||||
.nav {
|
.nav {
|
||||||
font-size: var(--font-size-large);
|
font-size: var(--font-size-large);
|
||||||
justify-content: center;
|
justify-content: space-between;
|
||||||
padding: 20px 0;
|
margin: 20px 0;
|
||||||
|
}
|
||||||
|
.items {
|
||||||
|
flex-wrap: wrap;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@media only screen and (max-width: 576px) {
|
@media only screen and (max-width: 768px) {
|
||||||
.header {
|
.header {
|
||||||
padding: 0 15px;
|
padding: 0 15px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.nav {
|
.nav {
|
||||||
font-size: var(--font-size-normal);
|
font-size: var(--font-size-normal);
|
||||||
|
flex-wrap: wrap;
|
||||||
|
justify-content: center;
|
||||||
|
flex-direction: column;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
.items {
|
||||||
|
display: flex;
|
||||||
|
justify-content: unset;
|
||||||
|
align-items: left;
|
||||||
|
font-size: var(--font-size-normal);
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
|
||||||
|
.items > div {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.header .active {
|
||||||
|
display: inherit;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.items a {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.burger {
|
||||||
|
display: block;
|
||||||
|
/* color: #4a4a4a; */
|
||||||
|
cursor: pointer;
|
||||||
|
height: 3.25rem;
|
||||||
|
width: 3.25rem;
|
||||||
|
margin-left: auto;
|
||||||
|
position: absolute;
|
||||||
|
right: 0;
|
||||||
|
top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.burger span {
|
||||||
|
transform: translateX(-50%);
|
||||||
|
padding: 1px 0px;
|
||||||
|
margin: 6px 0;
|
||||||
|
width: 20px;
|
||||||
|
display: block;
|
||||||
|
background-color: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
.burger div {
|
||||||
|
height: 100%;
|
||||||
|
color: white;
|
||||||
|
text-align: center;
|
||||||
|
margin: auto;
|
||||||
|
font-size: 1.5rem;
|
||||||
|
transform: translateX(-50%);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,21 +1,13 @@
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import Head from 'next/head';
|
import Head from 'next/head';
|
||||||
import { useRouter } from 'next/router';
|
|
||||||
import Header from 'components/layout/Header';
|
import Header from 'components/layout/Header';
|
||||||
import Footer from 'components/layout/Footer';
|
import Footer from 'components/layout/Footer';
|
||||||
|
|
||||||
export default function Layout({ title, children, header = true, footer = true }) {
|
export default function Layout({ title, children, header = true, footer = true }) {
|
||||||
const { basePath } = useRouter();
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<Head>
|
<Head>
|
||||||
<title>umami{title && ` - ${title}`}</title>
|
<title>umami{title && ` - ${title}`}</title>
|
||||||
<link rel="icon" href={`${basePath}/favicon.ico`} />
|
|
||||||
<link
|
|
||||||
href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;600&display=swap"
|
|
||||||
rel="stylesheet"
|
|
||||||
/>
|
|
||||||
</Head>
|
</Head>
|
||||||
{header && <Header />}
|
{header && <Header />}
|
||||||
<main className="container">{children}</main>
|
<main className="container">{children}</main>
|
||||||
|
|
|
@ -40,7 +40,7 @@ export default function BarChart({
|
||||||
function renderXLabel(label, index, values) {
|
function renderXLabel(label, index, values) {
|
||||||
if (loading) return '';
|
if (loading) return '';
|
||||||
const d = new Date(values[index].value);
|
const d = new Date(values[index].value);
|
||||||
const w = canvas.current.width;
|
const sw = canvas.current.width / window.devicePixelRatio;
|
||||||
|
|
||||||
switch (unit) {
|
switch (unit) {
|
||||||
case 'minute':
|
case 'minute':
|
||||||
|
@ -48,18 +48,27 @@ export default function BarChart({
|
||||||
case 'hour':
|
case 'hour':
|
||||||
return dateFormat(d, 'p', locale);
|
return dateFormat(d, 'p', locale);
|
||||||
case 'day':
|
case 'day':
|
||||||
if (records > 31) {
|
if (records > 25) {
|
||||||
if (w <= 500) {
|
if (sw <= 275) {
|
||||||
return index % 10 === 0 ? dateFormat(d, 'M/d', locale) : '';
|
return index % 10 === 0 ? dateFormat(d, 'M/d', locale) : '';
|
||||||
}
|
}
|
||||||
|
if (sw <= 550) {
|
||||||
return index % 5 === 0 ? dateFormat(d, 'M/d', locale) : '';
|
return index % 5 === 0 ? dateFormat(d, 'M/d', locale) : '';
|
||||||
}
|
}
|
||||||
if (w <= 500) {
|
if (sw <= 700) {
|
||||||
|
return index % 2 === 0 ? dateFormat(d, 'M/d', locale) : '';
|
||||||
|
}
|
||||||
|
return dateFormat(d, 'MMM d', locale);
|
||||||
|
}
|
||||||
|
if (sw <= 375) {
|
||||||
return index % 2 === 0 ? dateFormat(d, 'MMM d', locale) : '';
|
return index % 2 === 0 ? dateFormat(d, 'MMM d', locale) : '';
|
||||||
}
|
}
|
||||||
|
if (sw <= 425) {
|
||||||
|
return dateFormat(d, 'MMM d', locale);
|
||||||
|
}
|
||||||
return dateFormat(d, 'EEE M/d', locale);
|
return dateFormat(d, 'EEE M/d', locale);
|
||||||
case 'month':
|
case 'month':
|
||||||
if (w <= 660) {
|
if (sw <= 330) {
|
||||||
return index % 2 === 0 ? dateFormat(d, 'MMM', locale) : '';
|
return index % 2 === 0 ? dateFormat(d, 'MMM', locale) : '';
|
||||||
}
|
}
|
||||||
return dateFormat(d, 'MMM', locale);
|
return dateFormat(d, 'MMM', locale);
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
|
padding-bottom: 3px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.button svg {
|
.button svg {
|
||||||
|
|
|
@ -0,0 +1,100 @@
|
||||||
|
{
|
||||||
|
"label.accounts": "Akaun",
|
||||||
|
"label.add-account": "Tambah akaun",
|
||||||
|
"label.add-website": "Tambah laman web",
|
||||||
|
"label.administrator": "Pentadbir",
|
||||||
|
"label.all": "Semua",
|
||||||
|
"label.all-websites": "Semua laman web",
|
||||||
|
"label.all-events": "Semua peristiwa",
|
||||||
|
"label.back": "Kembali",
|
||||||
|
"label.cancel": "Batal",
|
||||||
|
"label.change-password": "Tukar kata laluan",
|
||||||
|
"label.confirm-password": "Sahkan kata laluan",
|
||||||
|
"label.copy-to-clipboard": "Salin ke papan keratan",
|
||||||
|
"label.current-password": "Kata laluan semasa",
|
||||||
|
"label.custom-range": "Julat khas",
|
||||||
|
"label.dashboard": "Papan pemuka",
|
||||||
|
"label.date-range": "Julat tarikh",
|
||||||
|
"label.default-date-range": "Julat tarikh lalai",
|
||||||
|
"label.delete": "Padam",
|
||||||
|
"label.delete-account": "Padam akaun",
|
||||||
|
"label.delete-website": "Padam laman web",
|
||||||
|
"label.dismiss": "Ketepikan",
|
||||||
|
"label.domain": "Domain",
|
||||||
|
"label.edit": "Edit",
|
||||||
|
"label.edit-account": "Edit akaun",
|
||||||
|
"label.edit-website": "Edit laman web",
|
||||||
|
"label.enable-share-url": "Aktifkan url berkongsi",
|
||||||
|
"label.invalid": "Tidak sah",
|
||||||
|
"label.invalid-domain": "Domain tidak sah",
|
||||||
|
"label.last-days": "{x} hari lepas",
|
||||||
|
"label.last-hours": "{x} jam lepas",
|
||||||
|
"label.logged-in-as": "Log masuk sebagai {username}",
|
||||||
|
"label.login": "Log masuk",
|
||||||
|
"label.logout": "Log keluar",
|
||||||
|
"label.more": "Lebih banyak lagi",
|
||||||
|
"label.name": "Nama",
|
||||||
|
"label.new-password": "Kata laluan baru",
|
||||||
|
"label.password": "Kata laluan",
|
||||||
|
"label.passwords-dont-match": "Kata laluan tidak sepadan",
|
||||||
|
"label.profile": "Profil",
|
||||||
|
"label.realtime": "Siaran langsung",
|
||||||
|
"label.realtime-logs": "Log secara siaran langsung",
|
||||||
|
"label.refresh": "Muat semula",
|
||||||
|
"label.required": "Diperlukan",
|
||||||
|
"label.reset": "Tetapkan semula",
|
||||||
|
"label.save": "Simpan",
|
||||||
|
"label.settings": "Tetapan",
|
||||||
|
"label.share-url": "Kongsikan URL",
|
||||||
|
"label.single-day": "Satu hari",
|
||||||
|
"label.this-month": "Bulan ini",
|
||||||
|
"label.this-week": "Minggu ini",
|
||||||
|
"label.this-year": "Tahun ini",
|
||||||
|
"label.timezone": "Zon masa",
|
||||||
|
"label.today": "Hari ini",
|
||||||
|
"label.tracking-code": "Kod penjejakan",
|
||||||
|
"label.unknown": "Tidak diketahui",
|
||||||
|
"label.username": "Nama pengguna",
|
||||||
|
"label.view-details": "Lihat butiran",
|
||||||
|
"label.websites": "Laman web",
|
||||||
|
"message.active-users": "{x} semasa {x, plural, one {pelawat} other {pelawat}}",
|
||||||
|
"message.confirm-delete": "Pastikah anda ingin memadam {target}?",
|
||||||
|
"message.copied": "Disalin!",
|
||||||
|
"message.delete-warning": "Semua data yang berkaitan juga akan dihapuskan.",
|
||||||
|
"message.failure": "Ada yang tidak kena.",
|
||||||
|
"message.get-share-url": "Dapatkan URL berkongsi",
|
||||||
|
"message.get-tracking-code": "Dapatkan kod penjejakan",
|
||||||
|
"message.go-to-settings": "Pergi ke tetapan",
|
||||||
|
"message.incorrect-username-password": "Pengguna/kata laluan tidak betul.",
|
||||||
|
"message.log.visitor": "Pelawat dari {country} mengguna {browser} pada {os} {device}",
|
||||||
|
"message.new-version-available": "Versi baru umami {version} boleh didapati!",
|
||||||
|
"message.no-data-available": "Tiada data yang boleh didapati.",
|
||||||
|
"message.no-websites-configured": "Anda tidak ada sebarang laman web yang telah dikonfigurasikan.",
|
||||||
|
"message.page-not-found": "Halaman tidak dijumpai.",
|
||||||
|
"message.powered-by": "Disediakan oleh {name}",
|
||||||
|
"message.save-success": "Berjaya disimpan.",
|
||||||
|
"message.share-url": "Ini adalah URL berkongsi untuk {target}.",
|
||||||
|
"message.track-stats": "Untuk menjejak statistik bagi {target}, letakkan kod berikut di bahagian {head} laman web anda.",
|
||||||
|
"message.type-delete": "Taip {delete} di dalam kotak di bawah untuk pengesahan.",
|
||||||
|
"metrics.actions": "Aksi",
|
||||||
|
"metrics.average-visit-time": "Purata tempoh masa lawatan",
|
||||||
|
"metrics.bounce-rate": "Kadar lantunan",
|
||||||
|
"metrics.browsers": "Pelayar web",
|
||||||
|
"metrics.countries": "Negara",
|
||||||
|
"metrics.device.desktop": "Desktop",
|
||||||
|
"metrics.device.laptop": "Laptop",
|
||||||
|
"metrics.device.mobile": "Telefon bimbit",
|
||||||
|
"metrics.device.tablet": "Tablet",
|
||||||
|
"metrics.devices": "Peranti",
|
||||||
|
"metrics.events": "Peristiwa",
|
||||||
|
"metrics.filter.combined": "Digabungkan",
|
||||||
|
"metrics.filter.domain-only": "Domain sahaja",
|
||||||
|
"metrics.filter.raw": "Mentah",
|
||||||
|
"metrics.operating-systems": "Sistem operasi",
|
||||||
|
"metrics.page-views": "Paparan halaman",
|
||||||
|
"metrics.pages": "Halaman",
|
||||||
|
"metrics.referrers": "Perujuk",
|
||||||
|
"metrics.unique-visitors": "Pelawat unik",
|
||||||
|
"metrics.views": "Lawatan",
|
||||||
|
"metrics.visitors": "Pelawat"
|
||||||
|
}
|
|
@ -29,7 +29,7 @@
|
||||||
"label.last-days": "Ostatnie {x} dni",
|
"label.last-days": "Ostatnie {x} dni",
|
||||||
"label.last-hours": "Ostatnie {x} godzin",
|
"label.last-hours": "Ostatnie {x} godzin",
|
||||||
"label.logged-in-as": "Zalogowano jako {username}",
|
"label.logged-in-as": "Zalogowano jako {username}",
|
||||||
"label.login": "Zaloguj sie",
|
"label.login": "Zaloguj się",
|
||||||
"label.logout": "Wyloguj",
|
"label.logout": "Wyloguj",
|
||||||
"label.more": "Więcej",
|
"label.more": "Więcej",
|
||||||
"label.name": "Nazwa",
|
"label.name": "Nazwa",
|
||||||
|
|
|
@ -0,0 +1,99 @@
|
||||||
|
{
|
||||||
|
"label.accounts": "Účty",
|
||||||
|
"label.add-account": "Pridať účet",
|
||||||
|
"label.add-website": "Pridať web",
|
||||||
|
"label.administrator": "Administrátor",
|
||||||
|
"label.all": "Všetko",
|
||||||
|
"label.all-websites": "Všetky weby",
|
||||||
|
"label.back": "Späť",
|
||||||
|
"label.cancel": "Zrušiť",
|
||||||
|
"label.change-password": "Zmeniť heslo",
|
||||||
|
"label.confirm-password": "Potvrdiť heslo",
|
||||||
|
"label.copy-to-clipboard": "Kopírovať do schránky",
|
||||||
|
"label.current-password": "Aktuálne heslo",
|
||||||
|
"label.custom-range": "Vlastný rozsah",
|
||||||
|
"label.dashboard": "Prehlad",
|
||||||
|
"label.date-range": "Obdobie",
|
||||||
|
"label.default-date-range": "Predvolené obdobie",
|
||||||
|
"label.delete": "Zmazať",
|
||||||
|
"label.delete-account": "Zmazať účet",
|
||||||
|
"label.delete-website": "Zmazať web",
|
||||||
|
"label.dismiss": "Odísť",
|
||||||
|
"label.domain": "Doména",
|
||||||
|
"label.edit": "Upraviť",
|
||||||
|
"label.edit-account": "Upraviť účet",
|
||||||
|
"label.edit-website": "Upraviť web",
|
||||||
|
"label.enable-share-url": "Povoliť zdielanie URL",
|
||||||
|
"label.invalid": "Neplatný",
|
||||||
|
"label.invalid-domain": "Neplatná doména",
|
||||||
|
"label.last-days": "Posledných {x} dní",
|
||||||
|
"label.last-hours": "Posledných {x} hodín",
|
||||||
|
"label.logged-in-as": "Prihlásený ako {username}",
|
||||||
|
"label.login": "Prihlásiť",
|
||||||
|
"label.logout": "Odhlásiť",
|
||||||
|
"label.more": "Viac",
|
||||||
|
"label.name": "Meno",
|
||||||
|
"label.new-password": "Nové heslo",
|
||||||
|
"label.password": "Heslo",
|
||||||
|
"label.passwords-dont-match": "Hesla se nezhodujú",
|
||||||
|
"label.profile": "Profil",
|
||||||
|
"label.realtime": "Aktuálne",
|
||||||
|
"label.realtime-logs": "Aktuálne záznamy",
|
||||||
|
"label.refresh": "Obnoviť",
|
||||||
|
"label.required": "Povinné",
|
||||||
|
"label.reset": "Reset",
|
||||||
|
"label.save": "Uložiť",
|
||||||
|
"label.settings": "Nastavenia",
|
||||||
|
"label.share-url": "Zdielanie URL",
|
||||||
|
"label.single-day": "Jeden deň",
|
||||||
|
"label.this-month": "Tento mesiac",
|
||||||
|
"label.this-week": "Tento týždeň",
|
||||||
|
"label.this-year": "Tento rok",
|
||||||
|
"label.timezone": "Časová zóna",
|
||||||
|
"label.today": "Dnes",
|
||||||
|
"label.tracking-code": "Sledovací kód",
|
||||||
|
"label.unknown": "Neznámý",
|
||||||
|
"label.username": "Užívateľské meno",
|
||||||
|
"label.view-details": "Zobraziť detaily",
|
||||||
|
"label.websites": "Weby",
|
||||||
|
"message.active-users": "{x} aktuálne {x, plural, one {návštevník} other {návštěvníci}}",
|
||||||
|
"message.confirm-delete": "Naozaj zmazať {target}?",
|
||||||
|
"message.copied": "Skopírované!",
|
||||||
|
"message.delete-warning": "Všetky príbuzné data budu tiež zmazané.",
|
||||||
|
"message.failure": "Niečo sa pokazilo.",
|
||||||
|
"message.get-share-url": "Získať zdielané URL",
|
||||||
|
"message.get-tracking-code": "Získať tracking kód",
|
||||||
|
"message.go-to-settings": "Ísť do nastavení",
|
||||||
|
"message.incorrect-username-password": "Nesprávné meno/heslo.",
|
||||||
|
"message.log.visitor": "Návštevník z {country} s prehliadačom {browser} na {os} {device}",
|
||||||
|
"message.new-version-available": "Nová verzia umami {version} je k dispozícii!",
|
||||||
|
"message.no-data-available": "Žiadne data.",
|
||||||
|
"message.no-websites-configured": "Nemáte nastavený žiadny web.",
|
||||||
|
"message.page-not-found": "Stránka sa nenašla.",
|
||||||
|
"message.powered-by": "Powered by {name}",
|
||||||
|
"message.save-success": "Úspešne uložené.",
|
||||||
|
"message.share-url": "Toto je zdielané URL pre {target}.",
|
||||||
|
"message.track-stats": "Pre sledovanie návštev na {target}, pridajte následujúci kód do {head} časti vašeho webu.",
|
||||||
|
"message.type-delete": "Napíšte {delete} pre potvrdenie.",
|
||||||
|
"metrics.actions": "Akcie",
|
||||||
|
"metrics.average-visit-time": "Priemerný čas návštevy",
|
||||||
|
"metrics.bounce-rate": "Okamžité opustenie",
|
||||||
|
"metrics.browsers": "Prehliadač",
|
||||||
|
"metrics.countries": "Zem",
|
||||||
|
"metrics.device.desktop": "Stolný počítač",
|
||||||
|
"metrics.device.laptop": "Prenosný počítač",
|
||||||
|
"metrics.device.mobile": "Mobilný telefon",
|
||||||
|
"metrics.device.tablet": "Tablet",
|
||||||
|
"metrics.devices": "Zariadenie",
|
||||||
|
"metrics.events": "Udalosti",
|
||||||
|
"metrics.filter.combined": "Kombinácie",
|
||||||
|
"metrics.filter.domain-only": "Domény",
|
||||||
|
"metrics.filter.raw": "Nezpracované",
|
||||||
|
"metrics.operating-systems": "Operačný systém",
|
||||||
|
"metrics.page-views": "Zobrazenie stánok",
|
||||||
|
"metrics.pages": "Stránky",
|
||||||
|
"metrics.referrers": "Odkazy",
|
||||||
|
"metrics.unique-visitors": "Jedinečné návštevy",
|
||||||
|
"metrics.views": "Zobrazení",
|
||||||
|
"metrics.visitors": "Návštevy"
|
||||||
|
}
|
|
@ -4,6 +4,7 @@
|
||||||
"label.add-website": "வலைத்தளத்தைச் சேர்க்க",
|
"label.add-website": "வலைத்தளத்தைச் சேர்க்க",
|
||||||
"label.administrator": "நிர்வாகியைச் சேர்க்க",
|
"label.administrator": "நிர்வாகியைச் சேர்க்க",
|
||||||
"label.all": "எல்லாம்",
|
"label.all": "எல்லாம்",
|
||||||
|
"label.all-events": "அனைத்து நிகழ்வுகளும்",
|
||||||
"label.all-websites": "அனைத்து வலைத்தளங்களும்",
|
"label.all-websites": "அனைத்து வலைத்தளங்களும்",
|
||||||
"label.back": "பின்னால்",
|
"label.back": "பின்னால்",
|
||||||
"label.cancel": "ரத்துசெய்",
|
"label.cancel": "ரத்துசெய்",
|
||||||
|
|
253
lib/constants.js
253
lib/constants.js
|
@ -142,3 +142,256 @@ export const BROWSERS = {
|
||||||
'ios-webview': 'iOS (webview)',
|
'ios-webview': 'iOS (webview)',
|
||||||
searchbot: 'Searchbot',
|
searchbot: 'Searchbot',
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export const MAP_FILE = '/datamaps.world.json';
|
||||||
|
|
||||||
|
export const ISO_COUNTRIES = {
|
||||||
|
AFG: 'AF',
|
||||||
|
ALA: 'AX',
|
||||||
|
ALB: 'AL',
|
||||||
|
DZA: 'DZ',
|
||||||
|
ASM: 'AS',
|
||||||
|
AND: 'AD',
|
||||||
|
AGO: 'AO',
|
||||||
|
AIA: 'AI',
|
||||||
|
ATA: 'AQ',
|
||||||
|
ATG: 'AG',
|
||||||
|
ARG: 'AR',
|
||||||
|
ARM: 'AM',
|
||||||
|
ABW: 'AW',
|
||||||
|
AUS: 'AU',
|
||||||
|
AUT: 'AT',
|
||||||
|
AZE: 'AZ',
|
||||||
|
BHS: 'BS',
|
||||||
|
BHR: 'BH',
|
||||||
|
BGD: 'BD',
|
||||||
|
BRB: 'BB',
|
||||||
|
BLR: 'BY',
|
||||||
|
BEL: 'BE',
|
||||||
|
BLZ: 'BZ',
|
||||||
|
BEN: 'BJ',
|
||||||
|
BMU: 'BM',
|
||||||
|
BTN: 'BT',
|
||||||
|
BOL: 'BO',
|
||||||
|
BIH: 'BA',
|
||||||
|
BWA: 'BW',
|
||||||
|
BVT: 'BV',
|
||||||
|
BRA: 'BR',
|
||||||
|
VGB: 'VG',
|
||||||
|
IOT: 'IO',
|
||||||
|
BRN: 'BN',
|
||||||
|
BGR: 'BG',
|
||||||
|
BFA: 'BF',
|
||||||
|
BDI: 'BI',
|
||||||
|
KHM: 'KH',
|
||||||
|
CMR: 'CM',
|
||||||
|
CAN: 'CA',
|
||||||
|
CPV: 'CV',
|
||||||
|
CYM: 'KY',
|
||||||
|
CAF: 'CF',
|
||||||
|
TCD: 'TD',
|
||||||
|
CHL: 'CL',
|
||||||
|
CHN: 'CN',
|
||||||
|
HKG: 'HK',
|
||||||
|
MAC: 'MO',
|
||||||
|
CXR: 'CX',
|
||||||
|
CCK: 'CC',
|
||||||
|
COL: 'CO',
|
||||||
|
COM: 'KM',
|
||||||
|
COG: 'CG',
|
||||||
|
COD: 'CD',
|
||||||
|
COK: 'CK',
|
||||||
|
CRI: 'CR',
|
||||||
|
CIV: 'CI',
|
||||||
|
HRV: 'HR',
|
||||||
|
CUB: 'CU',
|
||||||
|
CYP: 'CY',
|
||||||
|
CZE: 'CZ',
|
||||||
|
DNK: 'DK',
|
||||||
|
DJI: 'DJ',
|
||||||
|
DMA: 'DM',
|
||||||
|
DOM: 'DO',
|
||||||
|
ECU: 'EC',
|
||||||
|
EGY: 'EG',
|
||||||
|
SLV: 'SV',
|
||||||
|
GNQ: 'GQ',
|
||||||
|
ERI: 'ER',
|
||||||
|
EST: 'EE',
|
||||||
|
ETH: 'ET',
|
||||||
|
FLK: 'FK',
|
||||||
|
FRO: 'FO',
|
||||||
|
FJI: 'FJ',
|
||||||
|
FIN: 'FI',
|
||||||
|
FRA: 'FR',
|
||||||
|
GUF: 'GF',
|
||||||
|
PYF: 'PF',
|
||||||
|
ATF: 'TF',
|
||||||
|
GAB: 'GA',
|
||||||
|
GMB: 'GM',
|
||||||
|
GEO: 'GE',
|
||||||
|
DEU: 'DE',
|
||||||
|
GHA: 'GH',
|
||||||
|
GIB: 'GI',
|
||||||
|
GRC: 'GR',
|
||||||
|
GRL: 'GL',
|
||||||
|
GRD: 'GD',
|
||||||
|
GLP: 'GP',
|
||||||
|
GUM: 'GU',
|
||||||
|
GTM: 'GT',
|
||||||
|
GGY: 'GG',
|
||||||
|
GIN: 'GN',
|
||||||
|
GNB: 'GW',
|
||||||
|
GUY: 'GY',
|
||||||
|
HTI: 'HT',
|
||||||
|
HMD: 'HM',
|
||||||
|
VAT: 'VA',
|
||||||
|
HND: 'HN',
|
||||||
|
HUN: 'HU',
|
||||||
|
ISL: 'IS',
|
||||||
|
IND: 'IN',
|
||||||
|
IDN: 'ID',
|
||||||
|
IRN: 'IR',
|
||||||
|
IRQ: 'IQ',
|
||||||
|
IRL: 'IE',
|
||||||
|
IMN: 'IM',
|
||||||
|
ISR: 'IL',
|
||||||
|
ITA: 'IT',
|
||||||
|
JAM: 'JM',
|
||||||
|
JPN: 'JP',
|
||||||
|
JEY: 'JE',
|
||||||
|
JOR: 'JO',
|
||||||
|
KAZ: 'KZ',
|
||||||
|
KEN: 'KE',
|
||||||
|
KIR: 'KI',
|
||||||
|
PRK: 'KP',
|
||||||
|
KOR: 'KR',
|
||||||
|
KWT: 'KW',
|
||||||
|
KGZ: 'KG',
|
||||||
|
LAO: 'LA',
|
||||||
|
LVA: 'LV',
|
||||||
|
LBN: 'LB',
|
||||||
|
LSO: 'LS',
|
||||||
|
LBR: 'LR',
|
||||||
|
LBY: 'LY',
|
||||||
|
LIE: 'LI',
|
||||||
|
LTU: 'LT',
|
||||||
|
LUX: 'LU',
|
||||||
|
MKD: 'MK',
|
||||||
|
MDG: 'MG',
|
||||||
|
MWI: 'MW',
|
||||||
|
MYS: 'MY',
|
||||||
|
MDV: 'MV',
|
||||||
|
MLI: 'ML',
|
||||||
|
MLT: 'MT',
|
||||||
|
MHL: 'MH',
|
||||||
|
MTQ: 'MQ',
|
||||||
|
MRT: 'MR',
|
||||||
|
MUS: 'MU',
|
||||||
|
MYT: 'YT',
|
||||||
|
MEX: 'MX',
|
||||||
|
FSM: 'FM',
|
||||||
|
MDA: 'MD',
|
||||||
|
MCO: 'MC',
|
||||||
|
MNG: 'MN',
|
||||||
|
MNE: 'ME',
|
||||||
|
MSR: 'MS',
|
||||||
|
MAR: 'MA',
|
||||||
|
MOZ: 'MZ',
|
||||||
|
MMR: 'MM',
|
||||||
|
NAM: 'NA',
|
||||||
|
NRU: 'NR',
|
||||||
|
NPL: 'NP',
|
||||||
|
NLD: 'NL',
|
||||||
|
ANT: 'AN',
|
||||||
|
NCL: 'NC',
|
||||||
|
NZL: 'NZ',
|
||||||
|
NIC: 'NI',
|
||||||
|
NER: 'NE',
|
||||||
|
NGA: 'NG',
|
||||||
|
NIU: 'NU',
|
||||||
|
NFK: 'NF',
|
||||||
|
MNP: 'MP',
|
||||||
|
NOR: 'NO',
|
||||||
|
OMN: 'OM',
|
||||||
|
PAK: 'PK',
|
||||||
|
PLW: 'PW',
|
||||||
|
PSE: 'PS',
|
||||||
|
PAN: 'PA',
|
||||||
|
PNG: 'PG',
|
||||||
|
PRY: 'PY',
|
||||||
|
PER: 'PE',
|
||||||
|
PHL: 'PH',
|
||||||
|
PCN: 'PN',
|
||||||
|
POL: 'PL',
|
||||||
|
PRT: 'PT',
|
||||||
|
PRI: 'PR',
|
||||||
|
QAT: 'QA',
|
||||||
|
REU: 'RE',
|
||||||
|
ROU: 'RO',
|
||||||
|
RUS: 'RU',
|
||||||
|
RWA: 'RW',
|
||||||
|
BLM: 'BL',
|
||||||
|
SHN: 'SH',
|
||||||
|
KNA: 'KN',
|
||||||
|
LCA: 'LC',
|
||||||
|
MAF: 'MF',
|
||||||
|
SPM: 'PM',
|
||||||
|
VCT: 'VC',
|
||||||
|
WSM: 'WS',
|
||||||
|
SMR: 'SM',
|
||||||
|
STP: 'ST',
|
||||||
|
SAU: 'SA',
|
||||||
|
SEN: 'SN',
|
||||||
|
SRB: 'RS',
|
||||||
|
SYC: 'SC',
|
||||||
|
SLE: 'SL',
|
||||||
|
SGP: 'SG',
|
||||||
|
SVK: 'SK',
|
||||||
|
SVN: 'SI',
|
||||||
|
SLB: 'SB',
|
||||||
|
SOM: 'SO',
|
||||||
|
ZAF: 'ZA',
|
||||||
|
SGS: 'GS',
|
||||||
|
SSD: 'SS',
|
||||||
|
ESP: 'ES',
|
||||||
|
LKA: 'LK',
|
||||||
|
SDN: 'SD',
|
||||||
|
SUR: 'SR',
|
||||||
|
SJM: 'SJ',
|
||||||
|
SWZ: 'SZ',
|
||||||
|
SWE: 'SE',
|
||||||
|
CHE: 'CH',
|
||||||
|
SYR: 'SY',
|
||||||
|
TWN: 'TW',
|
||||||
|
TJK: 'TJ',
|
||||||
|
TZA: 'TZ',
|
||||||
|
THA: 'TH',
|
||||||
|
TLS: 'TL',
|
||||||
|
TGO: 'TG',
|
||||||
|
TKL: 'TK',
|
||||||
|
TON: 'TO',
|
||||||
|
TTO: 'TT',
|
||||||
|
TUN: 'TN',
|
||||||
|
TUR: 'TR',
|
||||||
|
TKM: 'TM',
|
||||||
|
TCA: 'TC',
|
||||||
|
TUV: 'TV',
|
||||||
|
UGA: 'UG',
|
||||||
|
UKR: 'UA',
|
||||||
|
ARE: 'AE',
|
||||||
|
GBR: 'GB',
|
||||||
|
USA: 'US',
|
||||||
|
UMI: 'UM',
|
||||||
|
URY: 'UY',
|
||||||
|
UZB: 'UZ',
|
||||||
|
VUT: 'VU',
|
||||||
|
VEN: 'VE',
|
||||||
|
VNM: 'VN',
|
||||||
|
VIR: 'VI',
|
||||||
|
WLF: 'WF',
|
||||||
|
ESH: 'EH',
|
||||||
|
YEM: 'YE',
|
||||||
|
ZMB: 'ZM',
|
||||||
|
ZWE: 'ZW',
|
||||||
|
XKX: 'XK',
|
||||||
|
};
|
||||||
|
|
10
lib/lang.js
10
lib/lang.js
|
@ -1,5 +1,6 @@
|
||||||
import {
|
import {
|
||||||
cs,
|
cs,
|
||||||
|
sk,
|
||||||
da,
|
da,
|
||||||
de,
|
de,
|
||||||
el,
|
el,
|
||||||
|
@ -13,6 +14,7 @@ import {
|
||||||
id,
|
id,
|
||||||
it,
|
it,
|
||||||
ja,
|
ja,
|
||||||
|
ms,
|
||||||
nb,
|
nb,
|
||||||
nl,
|
nl,
|
||||||
pl,
|
pl,
|
||||||
|
@ -50,12 +52,14 @@ import idMessages from 'lang-compiled/id-ID.json';
|
||||||
import ukMessages from 'lang-compiled/uk-UA.json';
|
import ukMessages from 'lang-compiled/uk-UA.json';
|
||||||
import fiMessages from 'lang-compiled/fi-FI.json';
|
import fiMessages from 'lang-compiled/fi-FI.json';
|
||||||
import csMessages from 'lang-compiled/cs-CZ.json';
|
import csMessages from 'lang-compiled/cs-CZ.json';
|
||||||
|
import skMessages from 'lang-compiled/sk-SK.json';
|
||||||
import plMessages from 'lang-compiled/pl-PL.json';
|
import plMessages from 'lang-compiled/pl-PL.json';
|
||||||
import taMessages from 'lang-compiled/ta-IN.json';
|
import taMessages from 'lang-compiled/ta-IN.json';
|
||||||
import hiMessages from 'lang-compiled/hi-IN.json';
|
import hiMessages from 'lang-compiled/hi-IN.json';
|
||||||
import heMessages from 'lang-compiled/he-IL.json';
|
import heMessages from 'lang-compiled/he-IL.json';
|
||||||
import itMessages from 'lang-compiled/it-IT.json';
|
import itMessages from 'lang-compiled/it-IT.json';
|
||||||
import faIRMessages from 'lang-compiled/fa-IR.json';
|
import faIRMessages from 'lang-compiled/fa-IR.json';
|
||||||
|
import msMYMessages from 'lang-compiled/ms-MY.json';
|
||||||
|
|
||||||
export const messages = {
|
export const messages = {
|
||||||
'en-US': enMessages,
|
'en-US': enMessages,
|
||||||
|
@ -81,12 +85,14 @@ export const messages = {
|
||||||
'uk-UA': ukMessages,
|
'uk-UA': ukMessages,
|
||||||
'fi-FI': fiMessages,
|
'fi-FI': fiMessages,
|
||||||
'cs-CZ': csMessages,
|
'cs-CZ': csMessages,
|
||||||
|
'sk-SK': skMessages,
|
||||||
'pl-PL': plMessages,
|
'pl-PL': plMessages,
|
||||||
'ta-IN': taMessages,
|
'ta-IN': taMessages,
|
||||||
'hi-IN': hiMessages,
|
'hi-IN': hiMessages,
|
||||||
'he-IL': heMessages,
|
'he-IL': heMessages,
|
||||||
'it-IT': itMessages,
|
'it-IT': itMessages,
|
||||||
'fa-IR': faIRMessages,
|
'fa-IR': faIRMessages,
|
||||||
|
'ms-MY': msMYMessages,
|
||||||
};
|
};
|
||||||
|
|
||||||
export const dateLocales = {
|
export const dateLocales = {
|
||||||
|
@ -113,12 +119,14 @@ export const dateLocales = {
|
||||||
'uk-UA': uk,
|
'uk-UA': uk,
|
||||||
'fi-FI': fi,
|
'fi-FI': fi,
|
||||||
'cs-CZ': cs,
|
'cs-CZ': cs,
|
||||||
|
'sk-SK': sk,
|
||||||
'pl-PL': pl,
|
'pl-PL': pl,
|
||||||
'ta-In': ta,
|
'ta-In': ta,
|
||||||
'hi-IN': hi,
|
'hi-IN': hi,
|
||||||
'he-IL': he,
|
'he-IL': he,
|
||||||
'it-IT': it,
|
'it-IT': it,
|
||||||
'fa-IR': faIR,
|
'fa-IR': faIR,
|
||||||
|
'ms-MY': ms,
|
||||||
};
|
};
|
||||||
|
|
||||||
export const menuOptions = [
|
export const menuOptions = [
|
||||||
|
@ -138,6 +146,7 @@ export const menuOptions = [
|
||||||
{ label: 'Italiano', value: 'it-IT', display: 'it' },
|
{ label: 'Italiano', value: 'it-IT', display: 'it' },
|
||||||
{ label: 'Bahasa Indonesia', value: 'id-ID', display: 'id' },
|
{ label: 'Bahasa Indonesia', value: 'id-ID', display: 'id' },
|
||||||
{ label: '日本語', value: 'ja-JP', display: 'ja' },
|
{ label: '日本語', value: 'ja-JP', display: 'ja' },
|
||||||
|
{ label: 'Malay', value: 'ms-MY', display: 'ms' },
|
||||||
{ label: 'Монгол', value: 'mn-MN', display: 'mn' },
|
{ label: 'Монгол', value: 'mn-MN', display: 'mn' },
|
||||||
{ label: 'Nederlands', value: 'nl-NL', display: 'nl' },
|
{ label: 'Nederlands', value: 'nl-NL', display: 'nl' },
|
||||||
{ label: 'Norsk Bokmål', value: 'nb-NO', display: 'nb' },
|
{ label: 'Norsk Bokmål', value: 'nb-NO', display: 'nb' },
|
||||||
|
@ -146,6 +155,7 @@ export const menuOptions = [
|
||||||
{ label: 'Português do Brasil', value: 'pt-BR', display: 'pt-BR' },
|
{ label: 'Português do Brasil', value: 'pt-BR', display: 'pt-BR' },
|
||||||
{ label: 'Русский', value: 'ru-RU', display: 'ru' },
|
{ label: 'Русский', value: 'ru-RU', display: 'ru' },
|
||||||
{ label: 'Română', value: 'ro-RO', display: 'ro' },
|
{ label: 'Română', value: 'ro-RO', display: 'ro' },
|
||||||
|
{ label: 'Slovenčina', value: 'sk-SK', display: 'sk' },
|
||||||
{ label: 'Suomi', value: 'fi-FI', display: 'fi' },
|
{ label: 'Suomi', value: 'fi-FI', display: 'fi' },
|
||||||
{ label: 'Svenska', value: 'sv-SE', display: 'sv' },
|
{ label: 'Svenska', value: 'sv-SE', display: 'sv' },
|
||||||
{ label: 'தமிழ்', value: 'ta-IN', display: 'ta' },
|
{ label: 'தமிழ்', value: 'ta-IN', display: 'ta' },
|
||||||
|
|
|
@ -158,11 +158,7 @@ export async function createSession(website_id, data) {
|
||||||
return runQuery(
|
return runQuery(
|
||||||
prisma.session.create({
|
prisma.session.create({
|
||||||
data: {
|
data: {
|
||||||
website: {
|
|
||||||
connect: {
|
|
||||||
website_id,
|
website_id,
|
||||||
},
|
|
||||||
},
|
|
||||||
...data,
|
...data,
|
||||||
},
|
},
|
||||||
select: {
|
select: {
|
||||||
|
@ -186,18 +182,10 @@ export async function savePageView(website_id, session_id, url, referrer) {
|
||||||
return runQuery(
|
return runQuery(
|
||||||
prisma.pageview.create({
|
prisma.pageview.create({
|
||||||
data: {
|
data: {
|
||||||
website: {
|
|
||||||
connect: {
|
|
||||||
website_id,
|
website_id,
|
||||||
},
|
|
||||||
},
|
|
||||||
session: {
|
|
||||||
connect: {
|
|
||||||
session_id,
|
session_id,
|
||||||
},
|
url: url?.substr(0, URL_LENGTH),
|
||||||
},
|
referrer: referrer?.substr(0, URL_LENGTH),
|
||||||
url: url.substr(0, URL_LENGTH),
|
|
||||||
referrer: referrer.substr(0, URL_LENGTH),
|
|
||||||
},
|
},
|
||||||
}),
|
}),
|
||||||
);
|
);
|
||||||
|
@ -207,19 +195,11 @@ export async function saveEvent(website_id, session_id, url, event_type, event_v
|
||||||
return runQuery(
|
return runQuery(
|
||||||
prisma.event.create({
|
prisma.event.create({
|
||||||
data: {
|
data: {
|
||||||
website: {
|
|
||||||
connect: {
|
|
||||||
website_id,
|
website_id,
|
||||||
},
|
|
||||||
},
|
|
||||||
session: {
|
|
||||||
connect: {
|
|
||||||
session_id,
|
session_id,
|
||||||
},
|
url: url?.substr(0, URL_LENGTH),
|
||||||
},
|
event_type: event_type?.substr(0, 50),
|
||||||
url: url.substr(0, URL_LENGTH),
|
event_value: event_value?.substr(0, 50),
|
||||||
event_type,
|
|
||||||
event_value,
|
|
||||||
},
|
},
|
||||||
}),
|
}),
|
||||||
);
|
);
|
||||||
|
|
22
package.json
22
package.json
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "umami",
|
"name": "umami",
|
||||||
"version": "1.15.0",
|
"version": "1.16.0",
|
||||||
"description": "A simple, fast, website analytics alternative to Google Analytics. ",
|
"description": "A simple, fast, website analytics alternative to Google Analytics. ",
|
||||||
"author": "Mike Cao <mike@mikecao.com>",
|
"author": "Mike Cao <mike@mikecao.com>",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
|
@ -27,7 +27,7 @@
|
||||||
"build-postgresql-client": "dotenv prisma generate -- --schema=./prisma/schema.postgresql.prisma",
|
"build-postgresql-client": "dotenv prisma generate -- --schema=./prisma/schema.postgresql.prisma",
|
||||||
"copy-db-schema": "node scripts/copy-db-schema.js",
|
"copy-db-schema": "node scripts/copy-db-schema.js",
|
||||||
"generate-lang": "npm-run-all extract-lang merge-lang",
|
"generate-lang": "npm-run-all extract-lang merge-lang",
|
||||||
"extract-lang": "formatjs extract {pages,components}/**/*.js --out-file build/messages.json",
|
"extract-lang": "formatjs extract '{pages,components}/**/*.js' --out-file build/messages.json",
|
||||||
"merge-lang": "node scripts/merge-lang.js",
|
"merge-lang": "node scripts/merge-lang.js",
|
||||||
"format-lang": "node scripts/format-lang.js",
|
"format-lang": "node scripts/format-lang.js",
|
||||||
"compile-lang": "formatjs compile-folder --ast build lang-compiled",
|
"compile-lang": "formatjs compile-folder --ast build lang-compiled",
|
||||||
|
@ -56,7 +56,7 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@prisma/client": "2.18.0",
|
"@prisma/client": "2.19.0",
|
||||||
"@reduxjs/toolkit": "^1.5.0",
|
"@reduxjs/toolkit": "^1.5.0",
|
||||||
"bcrypt": "^5.0.0",
|
"bcrypt": "^5.0.0",
|
||||||
"chalk": "^4.1.0",
|
"chalk": "^4.1.0",
|
||||||
|
@ -75,17 +75,17 @@
|
||||||
"jose": "2.0.3",
|
"jose": "2.0.3",
|
||||||
"maxmind": "^4.3.1",
|
"maxmind": "^4.3.1",
|
||||||
"moment-timezone": "^0.5.32",
|
"moment-timezone": "^0.5.32",
|
||||||
"next": "^10.0.8",
|
"next": "^10.0.9",
|
||||||
"prompts": "2.4.0",
|
"prompts": "2.4.0",
|
||||||
"prop-types": "^15.7.2",
|
"prop-types": "^15.7.2",
|
||||||
"react": "^17.0.1",
|
"react": "^17.0.2",
|
||||||
"react-dom": "^17.0.1",
|
"react-dom": "^17.0.2",
|
||||||
"react-intl": "^5.12.3",
|
"react-intl": "^5.14.1",
|
||||||
"react-redux": "^7.2.2",
|
"react-redux": "^7.2.3",
|
||||||
"react-simple-maps": "^2.3.0",
|
"react-simple-maps": "^2.3.0",
|
||||||
"react-spring": "^8.0.27",
|
"react-spring": "^8.0.27",
|
||||||
"react-tooltip": "^4.2.14",
|
"react-tooltip": "^4.2.17",
|
||||||
"react-use-measure": "^2.0.3",
|
"react-use-measure": "^2.0.4",
|
||||||
"react-window": "^1.8.6",
|
"react-window": "^1.8.6",
|
||||||
"redux": "^4.0.5",
|
"redux": "^4.0.5",
|
||||||
"redux-thunk": "^2.3.0",
|
"redux-thunk": "^2.3.0",
|
||||||
|
@ -98,7 +98,6 @@
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@formatjs/cli": "^2.13.16",
|
"@formatjs/cli": "^2.13.16",
|
||||||
"@prisma/cli": "2.18.0",
|
|
||||||
"@rollup/plugin-buble": "^0.21.3",
|
"@rollup/plugin-buble": "^0.21.3",
|
||||||
"@rollup/plugin-node-resolve": "^11.1.1",
|
"@rollup/plugin-node-resolve": "^11.1.1",
|
||||||
"@rollup/plugin-replace": "^2.3.4",
|
"@rollup/plugin-replace": "^2.3.4",
|
||||||
|
@ -121,6 +120,7 @@
|
||||||
"postcss-preset-env": "^6.7.0",
|
"postcss-preset-env": "^6.7.0",
|
||||||
"prettier": "^2.2.1",
|
"prettier": "^2.2.1",
|
||||||
"prettier-eslint": "^12.0.0",
|
"prettier-eslint": "^12.0.0",
|
||||||
|
"prisma": "2.19.0",
|
||||||
"rollup": "^2.38.3",
|
"rollup": "^2.38.3",
|
||||||
"rollup-plugin-hashbang": "^2.2.2",
|
"rollup-plugin-hashbang": "^2.2.2",
|
||||||
"rollup-plugin-terser": "^7.0.2",
|
"rollup-plugin-terser": "^7.0.2",
|
||||||
|
|
|
@ -31,12 +31,17 @@ export default function App({ Component, pageProps }) {
|
||||||
return (
|
return (
|
||||||
<Provider store={store}>
|
<Provider store={store}>
|
||||||
<Head>
|
<Head>
|
||||||
|
<link rel="icon" href={`${basePath}/favicon.ico`} />
|
||||||
<link rel="apple-touch-icon" sizes="180x180" href={`${basePath}/apple-touch-icon.png`} />
|
<link rel="apple-touch-icon" sizes="180x180" href={`${basePath}/apple-touch-icon.png`} />
|
||||||
<link rel="icon" type="image/png" sizes="32x32" href={`${basePath}/favicon-32x32.png`} />
|
<link rel="icon" type="image/png" sizes="32x32" href={`${basePath}/favicon-32x32.png`} />
|
||||||
<link rel="icon" type="image/png" sizes="16x16" href={`${basePath}/favicon-16x16.png`} />
|
<link rel="icon" type="image/png" sizes="16x16" href={`${basePath}/favicon-16x16.png`} />
|
||||||
<link rel="manifest" href={`${basePath}/site.webmanifest`} />
|
<link rel="manifest" href={`${basePath}/site.webmanifest`} />
|
||||||
<link rel="mask-icon" href={`${basePath}/safari-pinned-tab.svg`} color="#5bbad5" />
|
<link rel="mask-icon" href={`${basePath}/safari-pinned-tab.svg`} color="#5bbad5" />
|
||||||
<link rel="preconnect" href="https://fonts.gstatic.com" />
|
<link rel="preconnect" href="https://fonts.gstatic.com" />
|
||||||
|
<link
|
||||||
|
href="https://fonts.googleapis.com/css2?family=Inter:wght@400;600&display=swap"
|
||||||
|
rel="stylesheet"
|
||||||
|
/>
|
||||||
<meta name="msapplication-TileColor" content="#da532c" />
|
<meta name="msapplication-TileColor" content="#da532c" />
|
||||||
<meta name="theme-color" content="#ffffff" />
|
<meta name="theme-color" content="#ffffff" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||||
|
|
|
@ -0,0 +1,99 @@
|
||||||
|
-- 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) DEFAULT CURRENT_TIMESTAMP(0),
|
||||||
|
`updated_at` TIMESTAMP(0) DEFAULT CURRENT_TIMESTAMP(0),
|
||||||
|
UNIQUE INDEX `account.username_unique`(`username`),
|
||||||
|
|
||||||
|
PRIMARY KEY (`user_id`)
|
||||||
|
) 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) 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`)
|
||||||
|
) 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) DEFAULT CURRENT_TIMESTAMP(0),
|
||||||
|
`url` VARCHAR(500) NOT NULL,
|
||||||
|
`referrer` VARCHAR(500),
|
||||||
|
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`)
|
||||||
|
) 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) DEFAULT CURRENT_TIMESTAMP(0),
|
||||||
|
`hostname` VARCHAR(100),
|
||||||
|
`browser` VARCHAR(20),
|
||||||
|
`os` VARCHAR(20),
|
||||||
|
`device` VARCHAR(20),
|
||||||
|
`screen` VARCHAR(11),
|
||||||
|
`language` VARCHAR(35),
|
||||||
|
`country` CHAR(2),
|
||||||
|
UNIQUE INDEX `session.session_uuid_unique`(`session_uuid`),
|
||||||
|
INDEX `session_created_at_idx`(`created_at`),
|
||||||
|
INDEX `session_website_id_idx`(`website_id`),
|
||||||
|
|
||||||
|
PRIMARY KEY (`session_id`)
|
||||||
|
) 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),
|
||||||
|
`share_id` VARCHAR(64),
|
||||||
|
`created_at` TIMESTAMP(0) DEFAULT CURRENT_TIMESTAMP(0),
|
||||||
|
UNIQUE INDEX `website.website_uuid_unique`(`website_uuid`),
|
||||||
|
UNIQUE INDEX `website.share_id_unique`(`share_id`),
|
||||||
|
INDEX `website_user_id_idx`(`user_id`),
|
||||||
|
|
||||||
|
PRIMARY KEY (`website_id`)
|
||||||
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||||
|
|
||||||
|
-- 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;
|
|
@ -0,0 +1,3 @@
|
||||||
|
# Please do not edit this file manually
|
||||||
|
# It should be added in your version-control system (i.e. Git)
|
||||||
|
provider = "mysql"
|
|
@ -0,0 +1 @@
|
||||||
|
../schema.mysql.prisma
|
|
@ -0,0 +1 @@
|
||||||
|
../seed.js
|
|
@ -0,0 +1,129 @@
|
||||||
|
-- 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;
|
|
@ -0,0 +1,3 @@
|
||||||
|
# Please do not edit this file manually
|
||||||
|
# It should be added in your version-control system (i.e. Git)
|
||||||
|
provider = "postgresql"
|
|
@ -0,0 +1 @@
|
||||||
|
../schema.postgresql.prisma
|
|
@ -0,0 +1 @@
|
||||||
|
../seed.js
|
|
@ -8,23 +8,23 @@ datasource db {
|
||||||
}
|
}
|
||||||
|
|
||||||
model account {
|
model account {
|
||||||
user_id Int @default(autoincrement()) @id
|
user_id Int @id @default(autoincrement()) @db.UnsignedInt
|
||||||
username String @unique
|
username String @unique @db.VarChar(255)
|
||||||
password String
|
password String @db.VarChar(60)
|
||||||
is_admin Boolean @default(false)
|
is_admin Boolean @default(false)
|
||||||
created_at DateTime? @default(now())
|
created_at DateTime? @default(now()) @db.Timestamp(0)
|
||||||
updated_at DateTime? @default(now())
|
updated_at DateTime? @default(now()) @db.Timestamp(0)
|
||||||
website website[]
|
website website[]
|
||||||
}
|
}
|
||||||
|
|
||||||
model event {
|
model event {
|
||||||
event_id Int @default(autoincrement()) @id
|
event_id Int @id @default(autoincrement()) @db.UnsignedInt
|
||||||
website_id Int
|
website_id Int @db.UnsignedInt
|
||||||
session_id Int
|
session_id Int @db.UnsignedInt
|
||||||
created_at DateTime? @default(now())
|
created_at DateTime? @default(now()) @db.Timestamp(0)
|
||||||
url String
|
url String @db.VarChar(500)
|
||||||
event_type String
|
event_type String @db.VarChar(50)
|
||||||
event_value String
|
event_value String @db.VarChar(50)
|
||||||
session session @relation(fields: [session_id], references: [session_id])
|
session session @relation(fields: [session_id], references: [session_id])
|
||||||
website website @relation(fields: [website_id], references: [website_id])
|
website website @relation(fields: [website_id], references: [website_id])
|
||||||
|
|
||||||
|
@ -34,32 +34,34 @@ model event {
|
||||||
}
|
}
|
||||||
|
|
||||||
model pageview {
|
model pageview {
|
||||||
view_id Int @default(autoincrement()) @id
|
view_id Int @id @default(autoincrement()) @db.UnsignedInt
|
||||||
website_id Int
|
website_id Int @db.UnsignedInt
|
||||||
session_id Int
|
session_id Int @db.UnsignedInt
|
||||||
created_at DateTime? @default(now())
|
created_at DateTime? @default(now()) @db.Timestamp(0)
|
||||||
url String
|
url String @db.VarChar(500)
|
||||||
referrer String?
|
referrer String? @db.VarChar(500)
|
||||||
session session @relation(fields: [session_id], references: [session_id])
|
session session @relation(fields: [session_id], references: [session_id])
|
||||||
website website @relation(fields: [website_id], references: [website_id])
|
website website @relation(fields: [website_id], references: [website_id])
|
||||||
|
|
||||||
@@index([created_at], name: "pageview_created_at_idx")
|
@@index([created_at], name: "pageview_created_at_idx")
|
||||||
@@index([session_id], name: "pageview_session_id_idx")
|
@@index([session_id], name: "pageview_session_id_idx")
|
||||||
|
@@index([website_id, created_at], name: "pageview_website_id_created_at_idx")
|
||||||
@@index([website_id], name: "pageview_website_id_idx")
|
@@index([website_id], name: "pageview_website_id_idx")
|
||||||
|
@@index([website_id, session_id, created_at], name: "pageview_website_id_session_id_created_at_idx")
|
||||||
}
|
}
|
||||||
|
|
||||||
model session {
|
model session {
|
||||||
session_id Int @default(autoincrement()) @id
|
session_id Int @id @default(autoincrement()) @db.UnsignedInt
|
||||||
session_uuid String @unique
|
session_uuid String @unique @db.VarChar(36)
|
||||||
website_id Int
|
website_id Int @db.UnsignedInt
|
||||||
created_at DateTime? @default(now())
|
created_at DateTime? @default(now()) @db.Timestamp(0)
|
||||||
hostname String?
|
hostname String? @db.VarChar(100)
|
||||||
browser String?
|
browser String? @db.VarChar(20)
|
||||||
os String?
|
os String? @db.VarChar(20)
|
||||||
device String?
|
device String? @db.VarChar(20)
|
||||||
screen String?
|
screen String? @db.VarChar(11)
|
||||||
language String?
|
language String? @db.VarChar(35)
|
||||||
country String?
|
country String? @db.Char(2)
|
||||||
website website @relation(fields: [website_id], references: [website_id])
|
website website @relation(fields: [website_id], references: [website_id])
|
||||||
event event[]
|
event event[]
|
||||||
pageview pageview[]
|
pageview pageview[]
|
||||||
|
@ -69,13 +71,13 @@ model session {
|
||||||
}
|
}
|
||||||
|
|
||||||
model website {
|
model website {
|
||||||
website_id Int @default(autoincrement()) @id
|
website_id Int @id @default(autoincrement()) @db.UnsignedInt
|
||||||
website_uuid String @unique
|
website_uuid String @unique @db.VarChar(36)
|
||||||
user_id Int
|
user_id Int @db.UnsignedInt
|
||||||
name String
|
name String @db.VarChar(100)
|
||||||
domain String?
|
domain String? @db.VarChar(500)
|
||||||
created_at DateTime? @default(now())
|
share_id String? @unique @db.VarChar(64)
|
||||||
share_id String? @unique
|
created_at DateTime? @default(now()) @db.Timestamp(0)
|
||||||
account account @relation(fields: [user_id], references: [user_id])
|
account account @relation(fields: [user_id], references: [user_id])
|
||||||
event event[]
|
event event[]
|
||||||
pageview pageview[]
|
pageview pageview[]
|
||||||
|
|
|
@ -8,23 +8,23 @@ datasource db {
|
||||||
}
|
}
|
||||||
|
|
||||||
model account {
|
model account {
|
||||||
user_id Int @default(autoincrement()) @id
|
user_id Int @id @default(autoincrement())
|
||||||
username String @unique
|
username String @unique @db.VarChar(255)
|
||||||
password String
|
password String @db.VarChar(60)
|
||||||
is_admin Boolean @default(false)
|
is_admin Boolean @default(false)
|
||||||
created_at DateTime? @default(now())
|
created_at DateTime? @default(now()) @db.Timestamptz(6)
|
||||||
updated_at DateTime? @default(now())
|
updated_at DateTime? @default(now()) @db.Timestamptz(6)
|
||||||
website website[]
|
website website[]
|
||||||
}
|
}
|
||||||
|
|
||||||
model event {
|
model event {
|
||||||
event_id Int @default(autoincrement()) @id
|
event_id Int @id @default(autoincrement())
|
||||||
website_id Int
|
website_id Int
|
||||||
session_id Int
|
session_id Int
|
||||||
created_at DateTime? @default(now())
|
created_at DateTime? @default(now()) @db.Timestamptz(6)
|
||||||
url String
|
url String @db.VarChar(500)
|
||||||
event_type String
|
event_type String @db.VarChar(50)
|
||||||
event_value String
|
event_value String @db.VarChar(50)
|
||||||
session session @relation(fields: [session_id], references: [session_id])
|
session session @relation(fields: [session_id], references: [session_id])
|
||||||
website website @relation(fields: [website_id], references: [website_id])
|
website website @relation(fields: [website_id], references: [website_id])
|
||||||
|
|
||||||
|
@ -34,32 +34,34 @@ model event {
|
||||||
}
|
}
|
||||||
|
|
||||||
model pageview {
|
model pageview {
|
||||||
view_id Int @default(autoincrement()) @id
|
view_id Int @id @default(autoincrement())
|
||||||
website_id Int
|
website_id Int
|
||||||
session_id Int
|
session_id Int
|
||||||
created_at DateTime? @default(now())
|
created_at DateTime? @default(now()) @db.Timestamptz(6)
|
||||||
url String
|
url String @db.VarChar(500)
|
||||||
referrer String?
|
referrer String? @db.VarChar(500)
|
||||||
session session @relation(fields: [session_id], references: [session_id])
|
session session @relation(fields: [session_id], references: [session_id])
|
||||||
website website @relation(fields: [website_id], references: [website_id])
|
website website @relation(fields: [website_id], references: [website_id])
|
||||||
|
|
||||||
@@index([created_at], name: "pageview_created_at_idx")
|
@@index([created_at], name: "pageview_created_at_idx")
|
||||||
@@index([session_id], name: "pageview_session_id_idx")
|
@@index([session_id], name: "pageview_session_id_idx")
|
||||||
|
@@index([website_id, created_at], name: "pageview_website_id_created_at_idx")
|
||||||
@@index([website_id], name: "pageview_website_id_idx")
|
@@index([website_id], name: "pageview_website_id_idx")
|
||||||
|
@@index([website_id, session_id, created_at], name: "pageview_website_id_session_id_created_at_idx")
|
||||||
}
|
}
|
||||||
|
|
||||||
model session {
|
model session {
|
||||||
session_id Int @default(autoincrement()) @id
|
session_id Int @id @default(autoincrement())
|
||||||
session_uuid String @unique
|
session_uuid String @unique @db.Uuid
|
||||||
website_id Int
|
website_id Int
|
||||||
created_at DateTime? @default(now())
|
created_at DateTime? @default(now()) @db.Timestamptz(6)
|
||||||
hostname String?
|
hostname String? @db.VarChar(100)
|
||||||
browser String?
|
browser String? @db.VarChar(20)
|
||||||
os String?
|
os String? @db.VarChar(20)
|
||||||
screen String?
|
device String? @db.VarChar(20)
|
||||||
language String?
|
screen String? @db.VarChar(11)
|
||||||
country String?
|
language String? @db.VarChar(35)
|
||||||
device String?
|
country String? @db.Char(2)
|
||||||
website website @relation(fields: [website_id], references: [website_id])
|
website website @relation(fields: [website_id], references: [website_id])
|
||||||
event event[]
|
event event[]
|
||||||
pageview pageview[]
|
pageview pageview[]
|
||||||
|
@ -69,13 +71,13 @@ model session {
|
||||||
}
|
}
|
||||||
|
|
||||||
model website {
|
model website {
|
||||||
website_id Int @default(autoincrement()) @id
|
website_id Int @id @default(autoincrement())
|
||||||
website_uuid String @unique
|
website_uuid String @unique @db.Uuid
|
||||||
name String
|
|
||||||
created_at DateTime? @default(now())
|
|
||||||
user_id Int
|
user_id Int
|
||||||
domain String?
|
name String @db.VarChar(100)
|
||||||
share_id String? @unique
|
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])
|
account account @relation(fields: [user_id], references: [user_id])
|
||||||
event event[]
|
event event[]
|
||||||
pageview pageview[]
|
pageview pageview[]
|
||||||
|
|
|
@ -0,0 +1,30 @@
|
||||||
|
const bcrypt = require('bcrypt');
|
||||||
|
const { PrismaClient } = require('@prisma/client');
|
||||||
|
const prisma = new PrismaClient();
|
||||||
|
const SALT_ROUNDS = 10;
|
||||||
|
|
||||||
|
const hashPassword = password => {
|
||||||
|
return bcrypt.hash(password, SALT_ROUNDS);
|
||||||
|
};
|
||||||
|
|
||||||
|
async function main() {
|
||||||
|
const password = await hashPassword(process.env.ADMIN_PASSWORD || 'umami');
|
||||||
|
await prisma.account.upsert({
|
||||||
|
where: { username: 'admin' },
|
||||||
|
update: {},
|
||||||
|
create: {
|
||||||
|
username: 'admin',
|
||||||
|
password: password,
|
||||||
|
is_admin: true,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
main()
|
||||||
|
.catch(e => {
|
||||||
|
console.error(e);
|
||||||
|
process.exit(1);
|
||||||
|
})
|
||||||
|
.finally(async () => {
|
||||||
|
await prisma.$disconnect();
|
||||||
|
});
|
|
@ -0,0 +1 @@
|
||||||
|
{"AF":"Afghanistan","ZA":"Afrika Selatan","AL":"Albania","DZ":"Algeria","US":"Amerika Syarikat","AD":"Andorra","AO":"Angola","AI":"Anguilla","AQ":"Antartika","AG":"Antigua dan Barbuda","SA":"Arab Saudi","AR":"Argentina","AM":"Armenia","AW":"Aruba","AU":"Australia","AT":"Austria","AZ":"Azerbaijan","BS":"Bahamas","BH":"Bahrain","BD":"Bangladesh","BB":"Barbados","NL":"Belanda","BQ":"Belanda Caribbean","BY":"Belarus","BE":"Belgium","BZ":"Belize","BJ":"Benin","BM":"Bermuda","BT":"Bhutan","BO":"Bolivia","BA":"Bosnia dan Herzegovina","BW":"Botswana","BR":"Brazil","BN":"Brunei","BG":"Bulgaria","BF":"Burkina Faso","BI":"Burundi","CM":"Cameroon","CV":"Cape Verde","TD":"Chad","CL":"Chile","CN":"China","CO":"Colombia","KM":"Comoros","CG":"Congo - Brazzaville","CD":"Congo - Kinshasa","CR":"Costa Rica","CI":"Cote d\u2019Ivoire","HR":"Croatia","CU":"Cuba","CW":"Curacao","CY":"Cyprus","CZ":"Czechia","DK":"Denmark","DJ":"Djibouti","DM":"Dominica","EC":"Ecuador","SV":"El Salvador","AE":"Emiriah Arab Bersatu","ER":"Eritrea","EE":"Estonia","ET":"Ethiopia","FJ":"Fiji","PH":"Filipina","FI":"Finland","GA":"Gabon","GM":"Gambia","GE":"Georgia","GH":"Ghana","GI":"Gibraltar","GR":"Greece","GL":"Greenland","GD":"Grenada","GP":"Guadeloupe","GU":"Guam","GT":"Guatemala","GG":"Guernsey","GF":"Guiana Perancis","GN":"Guinea","GW":"Guinea Bissau","GQ":"Guinea Khatulistiwa","GY":"Guyana","HT":"Haiti","HN":"Honduras","HK":"Hong Kong SAR China","HU":"Hungary","IS":"Iceland","IN":"India","ID":"Indonesia","IR":"Iran","IQ":"Iraq","IE":"Ireland","IM":"Isle of Man","IL":"Israel","IT":"Itali","JM":"Jamaica","JP":"Jepun","DE":"Jerman","JE":"Jersey","JO":"Jordan","CA":"Kanada","KZ":"Kazakhstan","KH":"Kemboja","KE":"Kenya","AX":"Kepulauan Aland","KY":"Kepulauan Cayman","CC":"Kepulauan Cocos (Keeling)","CK":"Kepulauan Cook","FK":"Kepulauan Falkland","FO":"Kepulauan Faroe","GS":"Kepulauan Georgia Selatan & Sandwich Selatan","HM":"Kepulauan Heard & McDonald","MP":"Kepulauan Mariana Utara","MH":"Kepulauan Marshall","PN":"Kepulauan Pitcairn","SB":"Kepulauan Solomon","UM":"Kepulauan Terpencil A.S.","TC":"Kepulauan Turks dan Caicos","VI":"Kepulauan Virgin A.S.","VG":"Kepulauan Virgin British","KI":"Kiribati","KR":"Korea Selatan","KP":"Korea Utara","VA":"Kota Vatican","KW":"Kuwait","KG":"Kyrgyzstan","LA":"Laos","LV":"Latvia","LS":"Lesotho","LR":"Liberia","LY":"Libya","LI":"Liechtenstein","LT":"Lithuania","LB":"Lubnan","LU":"Luxembourg","MO":"Macau SAR China","MK":"Macedonia Utara","MG":"Madagaskar","MA":"Maghribi","MW":"Malawi","MY":"Malaysia","MV":"Maldives","ML":"Mali","MT":"Malta","MQ":"Martinique","MR":"Mauritania","MU":"Mauritius","YT":"Mayotte","EG":"Mesir","MX":"Mexico","FM":"Micronesia","MD":"Moldova","MC":"Monaco","MN":"Mongolia","ME":"Montenegro","MS":"Montserrat","MZ":"Mozambique","MM":"Myanmar (Burma)","NA":"Namibia","NR":"Nauru","NP":"Nepal","NC":"New Caledonia","NZ":"New Zealand","NI":"Nicaragua","NE":"Niger","NG":"Nigeria","NU":"Niue","NO":"Norway","OM":"Oman","PK":"Pakistan","PW":"Palau","PA":"Panama","PG":"Papua New Guinea","PY":"Paraguay","FR":"Perancis","PE":"Peru","PL":"Poland","PF":"Polinesia Perancis","PT":"Portugal","PR":"Puerto Rico","BV":"Pulau Bouvet","CX":"Pulau Krismas","NF":"Pulau Norfolk","QA":"Qatar","CF":"Republik Afrika Tengah","DO":"Republik Dominica","RE":"Reunion","RO":"Romania","RU":"Rusia","RW":"Rwanda","EH":"Sahara Barat","SH":"Saint Helena","KN":"Saint Kitts dan Nevis","LC":"Saint Lucia","MF":"Saint Martin","PM":"Saint Pierre dan Miquelon","VC":"Saint Vincent dan Grenadines","WS":"Samoa","AS":"Samoa Amerika","SM":"San Marino","ST":"Sao Tome dan Principe","SN":"Senegal","ES":"Sepanyol","RS":"Serbia","SC":"Seychelles","SL":"Sierra Leone","SG":"Singapura","SX":"Sint Maarten","SK":"Slovakia","SI":"Slovenia","SO":"Somalia","LK":"Sri Lanka","BL":"St. Barthelemy","SD":"Sudan","SS":"Sudan Selatan","SR":"Surinam","SJ":"Svalbard dan Jan Mayen","SZ":"Swaziland","SE":"Sweden","CH":"Switzerland","SY":"Syria","TW":"Taiwan","TJ":"Tajikistan","TZ":"Tanzania","TH":"Thailand","TL":"Timor-Leste","TG":"Togo","TK":"Tokelau","TO":"Tonga","TT":"Trinidad dan Tobago","TN":"Tunisia","TR":"Turki","TM":"Turkmenistan","TV":"Tuvalu","UG":"Uganda","UA":"Ukraine","GB":"United Kingdom","UY":"Uruguay","UZ":"Uzbekistan","VU":"Vanuatu","VE":"Venezuela","VN":"Vietnam","WF":"Wallis dan Futuna","IO":"Wilayah Lautan Hindi British","PS":"Wilayah Palestin","TF":"Wilayah Selatan Perancis","YE":"Yaman","ZM":"Zambia","ZW":"Zimbabwe"}
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -109,6 +109,7 @@ function mockPageView(
|
||||||
hostname: 'localhost',
|
hostname: 'localhost',
|
||||||
screen: '1680x1050',
|
screen: '1680x1050',
|
||||||
url: '/LOADTESTING',
|
url: '/LOADTESTING',
|
||||||
|
referrer: '/REFERRER',
|
||||||
},
|
},
|
||||||
) {
|
) {
|
||||||
return {
|
return {
|
||||||
|
|
282
yarn.lock
282
yarn.lock
|
@ -1157,41 +1157,33 @@
|
||||||
dependencies:
|
dependencies:
|
||||||
tslib "^2.0.1"
|
tslib "^2.0.1"
|
||||||
|
|
||||||
"@formatjs/ecma402-abstract@1.5.2":
|
"@formatjs/ecma402-abstract@1.6.4":
|
||||||
version "1.5.2"
|
version "1.6.4"
|
||||||
resolved "https://registry.yarnpkg.com/@formatjs/ecma402-abstract/-/ecma402-abstract-1.5.2.tgz#6c20c24f814ebf8e9dd46e34310a67895853a931"
|
resolved "https://registry.yarnpkg.com/@formatjs/ecma402-abstract/-/ecma402-abstract-1.6.4.tgz#cff5ef03837fb6bae70b16d04940213c17e87884"
|
||||||
integrity sha512-rscxoLyIwH2x+l15Z4eD580ioO3CkFVoWDLgDtgiOnWzDzpL5EigDRg9V4mINb8W6bQRT1xnCxiRwvw3bgvqrA==
|
integrity sha512-ukFjGD9dLsxcD9D5AEshJqQElPQeUAlTALT/lzIV6OcYojyuU81gw/uXDUOrs6XW79jtOJwQDkLqHbCJBJMOTw==
|
||||||
dependencies:
|
dependencies:
|
||||||
tslib "^2.0.1"
|
tslib "^2.1.0"
|
||||||
|
|
||||||
"@formatjs/ecma402-abstract@^1.2.2":
|
"@formatjs/ecma402-abstract@^1.2.2":
|
||||||
version "1.2.2"
|
version "1.2.2"
|
||||||
resolved "https://registry.yarnpkg.com/@formatjs/ecma402-abstract/-/ecma402-abstract-1.2.2.tgz#4810bdbd696d3805c535fd0620b7c8f45ab3164f"
|
resolved "https://registry.yarnpkg.com/@formatjs/ecma402-abstract/-/ecma402-abstract-1.2.2.tgz#4810bdbd696d3805c535fd0620b7c8f45ab3164f"
|
||||||
integrity sha512-mLCoAPGlXCVskb/ojBO6iurGqwo6sZvAl8pRC4N25bz4LPWExAM9LsOo057zN3Br1JxUM3RZHG4YGnVt+nSRYQ==
|
integrity sha512-mLCoAPGlXCVskb/ojBO6iurGqwo6sZvAl8pRC4N25bz4LPWExAM9LsOo057zN3Br1JxUM3RZHG4YGnVt+nSRYQ==
|
||||||
|
|
||||||
"@formatjs/intl-datetimeformat@3.2.7":
|
"@formatjs/intl-displaynames@4.0.12":
|
||||||
version "3.2.7"
|
version "4.0.12"
|
||||||
resolved "https://registry.yarnpkg.com/@formatjs/intl-datetimeformat/-/intl-datetimeformat-3.2.7.tgz#2cd32add6d79242394c3f5057b8b6e385f8665b6"
|
resolved "https://registry.yarnpkg.com/@formatjs/intl-displaynames/-/intl-displaynames-4.0.12.tgz#9af9992e544aa96b32c3a4994d6fef878e0376c9"
|
||||||
integrity sha512-DN3y19Hek9DhGSlwXhjgTQIHOf65XrPc7MbVw6JVnYUlsI/rkKV3fQFcEU77zCPHQjBqaM6R2OCkI4lj+uFrSA==
|
integrity sha512-2f3nf5IcPYk2SCS83rJoV5y47OTL+YtHDa5G42KDgSA8ZgmgkN5OaYs3WF6a2RweMG9jp4LCTUmqS42LcAhJSw==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@formatjs/ecma402-abstract" "1.5.2"
|
"@formatjs/ecma402-abstract" "1.6.4"
|
||||||
tslib "^2.0.1"
|
tslib "^2.1.0"
|
||||||
|
|
||||||
"@formatjs/intl-displaynames@4.0.5":
|
"@formatjs/intl-listformat@5.0.13":
|
||||||
version "4.0.5"
|
version "5.0.13"
|
||||||
resolved "https://registry.yarnpkg.com/@formatjs/intl-displaynames/-/intl-displaynames-4.0.5.tgz#2102a2bc984ce8391bf1216f6cde8d68d9f741ae"
|
resolved "https://registry.yarnpkg.com/@formatjs/intl-listformat/-/intl-listformat-5.0.13.tgz#5b13057a12642089108ddf4316bab976319fd941"
|
||||||
integrity sha512-+01kv4Lqao245SrNW1uhYjzYlUgg8xLjxqSlbWrkAplwGBG9JNnmOze1Jmv3ls+cUe9KA0oifL6Yn28u7Gm78g==
|
integrity sha512-z4vZ5FX6dsL2fbO7NCmmJXKXH9p0gubzZVSsmCOUBIuy6rODLD8kE2LVnefd4wnXEJi5/fAnwGT2NMjirWa71g==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@formatjs/ecma402-abstract" "1.5.2"
|
"@formatjs/ecma402-abstract" "1.6.4"
|
||||||
tslib "^2.0.1"
|
tslib "^2.1.0"
|
||||||
|
|
||||||
"@formatjs/intl-listformat@5.0.5":
|
|
||||||
version "5.0.5"
|
|
||||||
resolved "https://registry.yarnpkg.com/@formatjs/intl-listformat/-/intl-listformat-5.0.5.tgz#a00b5b9c5dc140fa81cba8dea7356fe40e91fb01"
|
|
||||||
integrity sha512-YHmAlmUkrnoJvZtUnEuxC0N8dWPABRNDdSJksjKC1xjdpZrzHplsiY4ugw7eO56lLjsBQ1DPOAfH10iZDtmzxA==
|
|
||||||
dependencies:
|
|
||||||
"@formatjs/ecma402-abstract" "1.5.2"
|
|
||||||
tslib "^2.0.1"
|
|
||||||
|
|
||||||
"@formatjs/intl-numberformat@^5.5.2":
|
"@formatjs/intl-numberformat@^5.5.2":
|
||||||
version "5.6.2"
|
version "5.6.2"
|
||||||
|
@ -1200,28 +1192,18 @@
|
||||||
dependencies:
|
dependencies:
|
||||||
"@formatjs/ecma402-abstract" "^1.2.2"
|
"@formatjs/ecma402-abstract" "^1.2.2"
|
||||||
|
|
||||||
"@formatjs/intl-relativetimeformat@8.0.4":
|
"@formatjs/intl@1.8.5":
|
||||||
version "8.0.4"
|
version "1.8.5"
|
||||||
resolved "https://registry.yarnpkg.com/@formatjs/intl-relativetimeformat/-/intl-relativetimeformat-8.0.4.tgz#eca86236320802c7c7d0f7500573ebab679d607d"
|
resolved "https://registry.yarnpkg.com/@formatjs/intl/-/intl-1.8.5.tgz#2c57b2a344033285270e23b35776f993bf49eb27"
|
||||||
integrity sha512-MUxsXa/cukBa4+8waUS7rQcVz0CKt7UufU9nXcUGh1FR85urqh42dz+3bM2klg51P5Mhove2mecQGeFwOhFYBQ==
|
integrity sha512-0ZAhhf3TgPwcTKITjYm31n9pIIXTks15fP+Uano0a5sTELKMHTaTPIwU7VHaodygtZvJgThIggK7zDNxng1/Jg==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@formatjs/ecma402-abstract" "1.5.2"
|
"@formatjs/ecma402-abstract" "1.6.4"
|
||||||
tslib "^2.0.1"
|
"@formatjs/intl-displaynames" "4.0.12"
|
||||||
|
"@formatjs/intl-listformat" "5.0.13"
|
||||||
"@formatjs/intl@1.6.8":
|
|
||||||
version "1.6.8"
|
|
||||||
resolved "https://registry.yarnpkg.com/@formatjs/intl/-/intl-1.6.8.tgz#c147cb3b5779e5a37bda791bc09be97a863d249a"
|
|
||||||
integrity sha512-cN4pUXFoUvbbLk9nq46QkDTSLzh8KN2ddK+Fi3py9Yv28xFQBl1HrSIZM4P8CFolzfoB3i7HsdI/yq0WocOx1A==
|
|
||||||
dependencies:
|
|
||||||
"@formatjs/ecma402-abstract" "1.5.2"
|
|
||||||
"@formatjs/intl-datetimeformat" "3.2.7"
|
|
||||||
"@formatjs/intl-displaynames" "4.0.5"
|
|
||||||
"@formatjs/intl-listformat" "5.0.5"
|
|
||||||
"@formatjs/intl-relativetimeformat" "8.0.4"
|
|
||||||
fast-memoize "^2.5.2"
|
fast-memoize "^2.5.2"
|
||||||
intl-messageformat "9.4.7"
|
intl-messageformat "9.5.4"
|
||||||
intl-messageformat-parser "6.3.2"
|
intl-messageformat-parser "6.4.4"
|
||||||
tslib "^2.0.1"
|
tslib "^2.1.0"
|
||||||
|
|
||||||
"@formatjs/ts-transformer@2.12.11":
|
"@formatjs/ts-transformer@2.12.11":
|
||||||
version "2.12.11"
|
version "2.12.11"
|
||||||
|
@ -1260,20 +1242,20 @@
|
||||||
resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-9.1.0.tgz#6c9eafc78c1529248f8f4d92b0799a712b6052c6"
|
resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-9.1.0.tgz#6c9eafc78c1529248f8f4d92b0799a712b6052c6"
|
||||||
integrity sha512-i9YbZPN3QgfighY/1X1Pu118VUz2Fmmhd6b2n0/O8YVgGGfw0FbUYoA97k7FkpGJ+pLCFEDLUmAPPV4D1kpeFw==
|
integrity sha512-i9YbZPN3QgfighY/1X1Pu118VUz2Fmmhd6b2n0/O8YVgGGfw0FbUYoA97k7FkpGJ+pLCFEDLUmAPPV4D1kpeFw==
|
||||||
|
|
||||||
"@next/env@10.0.8":
|
"@next/env@10.0.9":
|
||||||
version "10.0.8"
|
version "10.0.9"
|
||||||
resolved "https://registry.yarnpkg.com/@next/env/-/env-10.0.8.tgz#3306c9de20ef187438affbafce0ef966c9e43c3b"
|
resolved "https://registry.yarnpkg.com/@next/env/-/env-10.0.9.tgz#455fd364c8a5ee012b2cd4406d5294164990706d"
|
||||||
integrity sha512-vWdxAHD6gJn52tN5bxj1VoRgu5lNtRPc/HyYf7V014k2GZ9eKhqoFQGSSMNGHB7WgdUxLVw75+o9Ek9ClOOAjw==
|
integrity sha512-MERX3DY5u0Ed29eAsXeFBCZlFAGBtmjf7+Nht0hfgB25MPKKkIbC/0MRPcX/PQcAgLHsAHO6ay1u9xKzR4Vzjw==
|
||||||
|
|
||||||
"@next/polyfill-module@10.0.8":
|
"@next/polyfill-module@10.0.9":
|
||||||
version "10.0.8"
|
version "10.0.9"
|
||||||
resolved "https://registry.yarnpkg.com/@next/polyfill-module/-/polyfill-module-10.0.8.tgz#1d033f390389591f227499e286911e3db14c484b"
|
resolved "https://registry.yarnpkg.com/@next/polyfill-module/-/polyfill-module-10.0.9.tgz#0c21442dd73ec31ae30ac560bc5c5fdce068a98f"
|
||||||
integrity sha512-JCUGB4/SKQ4LXniv7LKGrpW+W2DGH/CLkrgXgSo/Ze+EJdMDLxC/VFhiuW+TgAaAWLE4gryoswlZBNyHtkPGQA==
|
integrity sha512-kPOP6ku/e8zdrK8hwxOrjUrPLcdDEj12huLHVz+DZU+20q6VlhMOtR8aKHW1460L4LoLE/DAa7YyIuxtArhDRg==
|
||||||
|
|
||||||
"@next/react-dev-overlay@10.0.8":
|
"@next/react-dev-overlay@10.0.9":
|
||||||
version "10.0.8"
|
version "10.0.9"
|
||||||
resolved "https://registry.yarnpkg.com/@next/react-dev-overlay/-/react-dev-overlay-10.0.8.tgz#a8e841647b74f9720cc60d3e3bd3da225ad12533"
|
resolved "https://registry.yarnpkg.com/@next/react-dev-overlay/-/react-dev-overlay-10.0.9.tgz#5162d66c05b2a0ca0d155f7e6663e8134d9d4ac9"
|
||||||
integrity sha512-ygVsvkzYTYIuME+dUUSjCxbNjrJ+Up9Y+CrWEmSSk6HuxajUvrB9vN6RT+PeAzEOQ5er1sWxmVHVdPknQPVWyQ==
|
integrity sha512-JsSh2Y004MEuPYqBD9eTl4PVZIjSzSy2GcD7MrW/gQcExYNpeMIJAbh8/OcyO1t+OnQeIHF5s/xTMsDHBGNcew==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/code-frame" "7.12.11"
|
"@babel/code-frame" "7.12.11"
|
||||||
anser "1.4.9"
|
anser "1.4.9"
|
||||||
|
@ -1287,10 +1269,10 @@
|
||||||
stacktrace-parser "0.1.10"
|
stacktrace-parser "0.1.10"
|
||||||
strip-ansi "6.0.0"
|
strip-ansi "6.0.0"
|
||||||
|
|
||||||
"@next/react-refresh-utils@10.0.8":
|
"@next/react-refresh-utils@10.0.9":
|
||||||
version "10.0.8"
|
version "10.0.9"
|
||||||
resolved "https://registry.yarnpkg.com/@next/react-refresh-utils/-/react-refresh-utils-10.0.8.tgz#6129d633e2c0a9b5760de002e998932f08c8baae"
|
resolved "https://registry.yarnpkg.com/@next/react-refresh-utils/-/react-refresh-utils-10.0.9.tgz#cdf9e41f8854c113397853daf78469b0c8140f14"
|
||||||
integrity sha512-ZMO77Xs2ioGV/nZB4GRDHgsNT2jhOp+cZIh6c7wf0xw9o/1KoTWN8nxWzwU/laAtkoSS+E6YdhuR4Mw3Ar3CSg==
|
integrity sha512-LSoKnM+fI9MHHew+mBg1w2e4/gjwPQsI+mDTzmfwdBwje+j9U2Int6XOZftMqBPXSlL04vjC9SRBkp0+3h8cNA==
|
||||||
|
|
||||||
"@nodelib/fs.scandir@2.1.3":
|
"@nodelib/fs.scandir@2.1.3":
|
||||||
version "2.1.3"
|
version "2.1.3"
|
||||||
|
@ -1330,29 +1312,22 @@
|
||||||
resolved "https://registry.yarnpkg.com/@panva/asn1.js/-/asn1.js-1.0.0.tgz#dd55ae7b8129e02049f009408b97c61ccf9032f6"
|
resolved "https://registry.yarnpkg.com/@panva/asn1.js/-/asn1.js-1.0.0.tgz#dd55ae7b8129e02049f009408b97c61ccf9032f6"
|
||||||
integrity sha512-UdkG3mLEqXgnlKsWanWcgb6dOjUzJ+XC5f+aWw30qrtjxeNUSfKX1cd5FBzOaXQumoe9nIqeZUvrRJS03HCCtw==
|
integrity sha512-UdkG3mLEqXgnlKsWanWcgb6dOjUzJ+XC5f+aWw30qrtjxeNUSfKX1cd5FBzOaXQumoe9nIqeZUvrRJS03HCCtw==
|
||||||
|
|
||||||
"@prisma/cli@2.18.0":
|
"@prisma/client@2.19.0":
|
||||||
version "2.18.0"
|
version "2.19.0"
|
||||||
resolved "https://registry.yarnpkg.com/@prisma/cli/-/cli-2.18.0.tgz#33ba55977a198b7cdc2b1e11bd58e3280fd3c707"
|
resolved "https://registry.yarnpkg.com/@prisma/client/-/client-2.19.0.tgz#a45f17a59fd109e95b61bf4b56d4a7642169ec0e"
|
||||||
integrity sha512-40524ZtDEivaHG4GcCXM8QOZSUg+wTj7tGe0HziXiejgFytY2vJVkEbaCKSY8fIxXso+nPKKKZYT5IJ3fSuXjg==
|
integrity sha512-QK4M8TjJh1QesyO9aLM7DeAQUi5+UnNHpEAm5kwqBO1cq/4Ag5yU9ladctJFJleEE5BLewXHwV2t9A+VfCZslg==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@prisma/engines" "2.18.0-34.da6fafb57b24e0b61ca20960c64e2d41f9e8cff1"
|
"@prisma/engines-version" "2.19.0-39.c1455d0b443d66b0d9db9bcb1bb9ee0d5bbc511d"
|
||||||
|
|
||||||
"@prisma/client@2.18.0":
|
"@prisma/engines-version@2.19.0-39.c1455d0b443d66b0d9db9bcb1bb9ee0d5bbc511d":
|
||||||
version "2.18.0"
|
version "2.19.0-39.c1455d0b443d66b0d9db9bcb1bb9ee0d5bbc511d"
|
||||||
resolved "https://registry.yarnpkg.com/@prisma/client/-/client-2.18.0.tgz#bff0a206f3caf7525583c703146f835dee0b5ad6"
|
resolved "https://registry.yarnpkg.com/@prisma/engines-version/-/engines-version-2.19.0-39.c1455d0b443d66b0d9db9bcb1bb9ee0d5bbc511d.tgz#a7f80d481ec6cb8e2975ab530664d4ca5fc9eba6"
|
||||||
integrity sha512-tRu0bdYNKIdWnFIbtgUmZyPgtDLV3AgwO8NYXirlbSn5poygbSaV87UfOBh1NmrvjS9EBP5dQv+bs62sVB84hA==
|
integrity sha512-NzhbwC4iMbRQwJxdhNQX6eaVcOuNGtHRk6aesWE4KMf/YmlW5kfi3HDy7WZ/C4P0Iyn9oURDuk+xZV6QDUVjTw==
|
||||||
dependencies:
|
|
||||||
"@prisma/engines-version" "2.18.0-34.da6fafb57b24e0b61ca20960c64e2d41f9e8cff1"
|
|
||||||
|
|
||||||
"@prisma/engines-version@2.18.0-34.da6fafb57b24e0b61ca20960c64e2d41f9e8cff1":
|
"@prisma/engines@2.19.0-39.c1455d0b443d66b0d9db9bcb1bb9ee0d5bbc511d":
|
||||||
version "2.18.0-34.da6fafb57b24e0b61ca20960c64e2d41f9e8cff1"
|
version "2.19.0-39.c1455d0b443d66b0d9db9bcb1bb9ee0d5bbc511d"
|
||||||
resolved "https://registry.yarnpkg.com/@prisma/engines-version/-/engines-version-2.18.0-34.da6fafb57b24e0b61ca20960c64e2d41f9e8cff1.tgz#c595c9d85ab2c67b67d0eb7bfbb0a3b05b41fdbe"
|
resolved "https://registry.yarnpkg.com/@prisma/engines/-/engines-2.19.0-39.c1455d0b443d66b0d9db9bcb1bb9ee0d5bbc511d.tgz#db2809a6f7f18584e3ca89b1f5bad884155629ec"
|
||||||
integrity sha512-+Eljsb1XItfq9B6vRTA1Oe4CQOGAxbsjtPAIORZwaU4Gt9RybnXapFlrQ8Mac89PXeSgcO4RnPSLEYhcd3kSVg==
|
integrity sha512-rEWpaG7wZvPuWJC5SwkBB/Iwue//oC5yv58Mse7r+ibtgkA7vGdWc1bFDQ32DT9tDL5WSC6bBwqEASGV/1Gm1Q==
|
||||||
|
|
||||||
"@prisma/engines@2.18.0-34.da6fafb57b24e0b61ca20960c64e2d41f9e8cff1":
|
|
||||||
version "2.18.0-34.da6fafb57b24e0b61ca20960c64e2d41f9e8cff1"
|
|
||||||
resolved "https://registry.yarnpkg.com/@prisma/engines/-/engines-2.18.0-34.da6fafb57b24e0b61ca20960c64e2d41f9e8cff1.tgz#647a7e2735b08fe28425be135120bb54ea408256"
|
|
||||||
integrity sha512-Q5q5mQePRFSSGbd/14Ogq1RNkebbbwskiTbWsvrSq14t9Us0rC9Xsecd4mr4rEAy8Yd6sXEJW4czZ/88DGzz2w==
|
|
||||||
|
|
||||||
"@reduxjs/toolkit@^1.5.0":
|
"@reduxjs/toolkit@^1.5.0":
|
||||||
version "1.5.0"
|
version "1.5.0"
|
||||||
|
@ -1582,7 +1557,7 @@
|
||||||
dependencies:
|
dependencies:
|
||||||
"@types/node" "*"
|
"@types/node" "*"
|
||||||
|
|
||||||
"@types/hoist-non-react-statics@^3.3.1":
|
"@types/hoist-non-react-statics@^3.3.0", "@types/hoist-non-react-statics@^3.3.1":
|
||||||
version "3.3.1"
|
version "3.3.1"
|
||||||
resolved "https://registry.yarnpkg.com/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz#1124aafe5118cb591977aeb1ceaaed1070eb039f"
|
resolved "https://registry.yarnpkg.com/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz#1124aafe5118cb591977aeb1ceaaed1070eb039f"
|
||||||
integrity sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA==
|
integrity sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA==
|
||||||
|
@ -1649,6 +1624,16 @@
|
||||||
resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.4.tgz#15925414e0ad2cd765bfef58842f7e26a7accb24"
|
resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.4.tgz#15925414e0ad2cd765bfef58842f7e26a7accb24"
|
||||||
integrity sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==
|
integrity sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==
|
||||||
|
|
||||||
|
"@types/react-redux@^7.1.16":
|
||||||
|
version "7.1.16"
|
||||||
|
resolved "https://registry.yarnpkg.com/@types/react-redux/-/react-redux-7.1.16.tgz#0fbd04c2500c12105494c83d4a3e45c084e3cb21"
|
||||||
|
integrity sha512-f/FKzIrZwZk7YEO9E1yoxIuDNRiDducxkFlkw/GNMGEnK9n4K8wJzlJBghpSuOVDgEUHoDkDF7Gi9lHNQR4siw==
|
||||||
|
dependencies:
|
||||||
|
"@types/hoist-non-react-statics" "^3.3.0"
|
||||||
|
"@types/react" "*"
|
||||||
|
hoist-non-react-statics "^3.3.0"
|
||||||
|
redux "^4.0.0"
|
||||||
|
|
||||||
"@types/react@*":
|
"@types/react@*":
|
||||||
version "16.9.49"
|
version "16.9.49"
|
||||||
resolved "https://registry.yarnpkg.com/@types/react/-/react-16.9.49.tgz#09db021cf8089aba0cdb12a49f8021a69cce4872"
|
resolved "https://registry.yarnpkg.com/@types/react/-/react-16.9.49.tgz#09db021cf8089aba0cdb12a49f8021a69cce4872"
|
||||||
|
@ -4126,13 +4111,13 @@ intl-messageformat-parser@6.1.0:
|
||||||
"@formatjs/ecma402-abstract" "1.5.0"
|
"@formatjs/ecma402-abstract" "1.5.0"
|
||||||
tslib "^2.0.1"
|
tslib "^2.0.1"
|
||||||
|
|
||||||
intl-messageformat-parser@6.3.2:
|
intl-messageformat-parser@6.4.4:
|
||||||
version "6.3.2"
|
version "6.4.4"
|
||||||
resolved "https://registry.yarnpkg.com/intl-messageformat-parser/-/intl-messageformat-parser-6.3.2.tgz#5104d23b175f1c9aaccacdc98d558930b6890d00"
|
resolved "https://registry.yarnpkg.com/intl-messageformat-parser/-/intl-messageformat-parser-6.4.4.tgz#abbd94e96dc4ff41607376bfab024553450cc1e0"
|
||||||
integrity sha512-n6To2TG0ictSMDBXvenS+BalJDzbIAT/e6ByPXPEBhaouVEaHbqII02gZbusAoEUI3Xq19bKyrDkkOBP0PapIA==
|
integrity sha512-7AaFKNZEfzLQR6+jivOuz9e7yA8ka5KrmLebgY4QHTRLf8r64dp3LjnW98LkBWjdk8GK0sawD2dHDqW++A/pXA==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@formatjs/ecma402-abstract" "1.5.2"
|
"@formatjs/ecma402-abstract" "1.6.4"
|
||||||
tslib "^2.0.1"
|
tslib "^2.1.0"
|
||||||
|
|
||||||
intl-messageformat-parser@^5.3.7:
|
intl-messageformat-parser@^5.3.7:
|
||||||
version "5.5.1"
|
version "5.5.1"
|
||||||
|
@ -4148,14 +4133,14 @@ intl-messageformat-parser@^6.0.7:
|
||||||
dependencies:
|
dependencies:
|
||||||
"@formatjs/ecma402-abstract" "^1.2.2"
|
"@formatjs/ecma402-abstract" "^1.2.2"
|
||||||
|
|
||||||
intl-messageformat@9.4.7:
|
intl-messageformat@9.5.4:
|
||||||
version "9.4.7"
|
version "9.5.4"
|
||||||
resolved "https://registry.yarnpkg.com/intl-messageformat/-/intl-messageformat-9.4.7.tgz#02696a819ade1ae847639335199e3b6d8ba825c9"
|
resolved "https://registry.yarnpkg.com/intl-messageformat/-/intl-messageformat-9.5.4.tgz#3e55b02a18224ca42701ea2dba54f8eed67accca"
|
||||||
integrity sha512-BUGRv2MI2m4CQFcZH09pf+zl1msaCe+G4e63dPT0wEEuySOMfoEilGftOJ/jxnOvDs6udD2OVCRUuv2/xt8bag==
|
integrity sha512-SmlachKBr6IaV21zcPWsEwD5KtmgSKtaHW0ud0+88nuDK8XiFeDqIFWESkwj6Hjoixj4AVErijZsLBwm49SaEA==
|
||||||
dependencies:
|
dependencies:
|
||||||
fast-memoize "^2.5.2"
|
fast-memoize "^2.5.2"
|
||||||
intl-messageformat-parser "6.3.2"
|
intl-messageformat-parser "6.4.4"
|
||||||
tslib "^2.0.1"
|
tslib "^2.1.0"
|
||||||
|
|
||||||
is-alphabetical@^1.0.0:
|
is-alphabetical@^1.0.0:
|
||||||
version "1.0.4"
|
version "1.0.4"
|
||||||
|
@ -5034,17 +5019,17 @@ next-tick@~1.0.0:
|
||||||
resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c"
|
resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c"
|
||||||
integrity sha1-yobR/ogoFpsBICCOPchCS524NCw=
|
integrity sha1-yobR/ogoFpsBICCOPchCS524NCw=
|
||||||
|
|
||||||
next@^10.0.8:
|
next@^10.0.9:
|
||||||
version "10.0.8"
|
version "10.0.9"
|
||||||
resolved "https://registry.yarnpkg.com/next/-/next-10.0.8.tgz#a2232c11ffad974d67f3d572b8db2acaa5ddedd7"
|
resolved "https://registry.yarnpkg.com/next/-/next-10.0.9.tgz#ad5d8e0368fee8363cdfd64d22dfbf71f683ae66"
|
||||||
integrity sha512-iDY65ce4Prn/9EnQpJGFMb5QJvtGWzZPk6KQqT7vDNu4D+jkivkk9NaAs/k1hR73pXdJHmhHer1s0YxLSghAKQ==
|
integrity sha512-HyoVjYydcM6LaFAUOHSxVQCcKOsIimVO/IKXCuWUu1rr6DDgXbWNg/8ckH084qD46MOYlLzjViiZ3KCmNQL4Cw==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/runtime" "7.12.5"
|
"@babel/runtime" "7.12.5"
|
||||||
"@hapi/accept" "5.0.1"
|
"@hapi/accept" "5.0.1"
|
||||||
"@next/env" "10.0.8"
|
"@next/env" "10.0.9"
|
||||||
"@next/polyfill-module" "10.0.8"
|
"@next/polyfill-module" "10.0.9"
|
||||||
"@next/react-dev-overlay" "10.0.8"
|
"@next/react-dev-overlay" "10.0.9"
|
||||||
"@next/react-refresh-utils" "10.0.8"
|
"@next/react-refresh-utils" "10.0.9"
|
||||||
"@opentelemetry/api" "0.14.0"
|
"@opentelemetry/api" "0.14.0"
|
||||||
ast-types "0.13.2"
|
ast-types "0.13.2"
|
||||||
browserslist "4.16.1"
|
browserslist "4.16.1"
|
||||||
|
@ -6053,6 +6038,13 @@ pretty-format@^23.0.1:
|
||||||
ansi-regex "^3.0.0"
|
ansi-regex "^3.0.0"
|
||||||
ansi-styles "^3.2.0"
|
ansi-styles "^3.2.0"
|
||||||
|
|
||||||
|
prisma@2.19.0:
|
||||||
|
version "2.19.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/prisma/-/prisma-2.19.0.tgz#2c14f9cbbfb0ab69c8a9473e16736759713d29ad"
|
||||||
|
integrity sha512-iartCNVrtR4XT20ABN3zrSi3R/pCBe75Y0ZH8681QIGm8qjRQzf3DnbscPZgZ9iY4KFuVxL8ZrBQVDmRhpN0EQ==
|
||||||
|
dependencies:
|
||||||
|
"@prisma/engines" "2.19.0-39.c1455d0b443d66b0d9db9bcb1bb9ee0d5bbc511d"
|
||||||
|
|
||||||
process-nextick-args@~2.0.0:
|
process-nextick-args@~2.0.0:
|
||||||
version "2.0.1"
|
version "2.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
|
resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
|
||||||
|
@ -6180,49 +6172,47 @@ rc@^1.2.7:
|
||||||
minimist "^1.2.0"
|
minimist "^1.2.0"
|
||||||
strip-json-comments "~2.0.1"
|
strip-json-comments "~2.0.1"
|
||||||
|
|
||||||
react-dom@^17.0.1:
|
react-dom@^17.0.2:
|
||||||
version "17.0.1"
|
version "17.0.2"
|
||||||
resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-17.0.1.tgz#1de2560474ec9f0e334285662ede52dbc5426fc6"
|
resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-17.0.2.tgz#ecffb6845e3ad8dbfcdc498f0d0a939736502c23"
|
||||||
integrity sha512-6eV150oJZ9U2t9svnsspTMrWNyHc6chX0KzDeAOXftRa8bNeOKTTfCJ7KorIwenkHd2xqVTBTCZd79yk/lx/Ug==
|
integrity sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==
|
||||||
dependencies:
|
dependencies:
|
||||||
loose-envify "^1.1.0"
|
loose-envify "^1.1.0"
|
||||||
object-assign "^4.1.1"
|
object-assign "^4.1.1"
|
||||||
scheduler "^0.20.1"
|
scheduler "^0.20.2"
|
||||||
|
|
||||||
react-fast-compare@^2.0.1:
|
react-fast-compare@^2.0.1:
|
||||||
version "2.0.4"
|
version "2.0.4"
|
||||||
resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-2.0.4.tgz#e84b4d455b0fec113e0402c329352715196f81f9"
|
resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-2.0.4.tgz#e84b4d455b0fec113e0402c329352715196f81f9"
|
||||||
integrity sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw==
|
integrity sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw==
|
||||||
|
|
||||||
react-intl@^5.12.3:
|
react-intl@^5.14.1:
|
||||||
version "5.12.3"
|
version "5.14.1"
|
||||||
resolved "https://registry.yarnpkg.com/react-intl/-/react-intl-5.12.3.tgz#edac4339ac28feb71923c5ec5965aa0c51672b4c"
|
resolved "https://registry.yarnpkg.com/react-intl/-/react-intl-5.14.1.tgz#f600d18948f6b4e6bc8d717a7792e46e698f3ffd"
|
||||||
integrity sha512-xzqsorTC7LYYS29bokeg3HuEL4gZ4xhrrme7PHx+wum4S6d+TEMERJbdsJTrU95ClWiqZ8u7BsT7Ep+0yTXkyw==
|
integrity sha512-HC0fpaxnlc0Eua9f7odV04P1nO54M0NKlT3w6o/LFGEk49AoNj8axmBViQYeBCW3NdaZSbXN58VkFcvMEBuyfw==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@formatjs/ecma402-abstract" "1.5.2"
|
"@formatjs/ecma402-abstract" "1.6.4"
|
||||||
"@formatjs/intl" "1.6.8"
|
"@formatjs/intl" "1.8.5"
|
||||||
"@formatjs/intl-displaynames" "4.0.5"
|
"@formatjs/intl-displaynames" "4.0.12"
|
||||||
"@formatjs/intl-listformat" "5.0.5"
|
"@formatjs/intl-listformat" "5.0.13"
|
||||||
"@formatjs/intl-relativetimeformat" "8.0.4"
|
|
||||||
"@types/hoist-non-react-statics" "^3.3.1"
|
"@types/hoist-non-react-statics" "^3.3.1"
|
||||||
fast-memoize "^2.5.2"
|
|
||||||
hoist-non-react-statics "^3.3.2"
|
hoist-non-react-statics "^3.3.2"
|
||||||
intl-messageformat "9.4.7"
|
intl-messageformat "9.5.4"
|
||||||
intl-messageformat-parser "6.3.2"
|
intl-messageformat-parser "6.4.4"
|
||||||
shallow-equal "^1.2.1"
|
tslib "^2.1.0"
|
||||||
tslib "^2.0.1"
|
|
||||||
|
|
||||||
react-is@16.13.1, react-is@^16.13.1, react-is@^16.7.0, react-is@^16.8.1:
|
react-is@16.13.1, react-is@^16.13.1, react-is@^16.7.0, react-is@^16.8.1:
|
||||||
version "16.13.1"
|
version "16.13.1"
|
||||||
resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
|
resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
|
||||||
integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==
|
integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==
|
||||||
|
|
||||||
react-redux@^7.2.2:
|
react-redux@^7.2.3:
|
||||||
version "7.2.2"
|
version "7.2.3"
|
||||||
resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-7.2.2.tgz#03862e803a30b6b9ef8582dadcc810947f74b736"
|
resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-7.2.3.tgz#4c084618600bb199012687da9e42123cca3f0be9"
|
||||||
integrity sha512-8+CQ1EvIVFkYL/vu6Olo7JFLWop1qRUeb46sGtIMDCSpgwPQq8fPLpirIB0iTqFe9XYEFPHssdX8/UwN6pAkEA==
|
integrity sha512-ZhAmQ1lrK+Pyi0ZXNMUZuYxYAZd59wFuVDGUt536kSGdD0ya9Q7BfsE95E3TsFLE3kOSFp5m6G5qbatE+Ic1+w==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/runtime" "^7.12.1"
|
"@babel/runtime" "^7.12.1"
|
||||||
|
"@types/react-redux" "^7.1.16"
|
||||||
hoist-non-react-statics "^3.3.2"
|
hoist-non-react-statics "^3.3.2"
|
||||||
loose-envify "^1.4.0"
|
loose-envify "^1.4.0"
|
||||||
prop-types "^15.7.2"
|
prop-types "^15.7.2"
|
||||||
|
@ -6251,18 +6241,18 @@ react-spring@^8.0.27:
|
||||||
"@babel/runtime" "^7.3.1"
|
"@babel/runtime" "^7.3.1"
|
||||||
prop-types "^15.5.8"
|
prop-types "^15.5.8"
|
||||||
|
|
||||||
react-tooltip@^4.2.14:
|
react-tooltip@^4.2.17:
|
||||||
version "4.2.14"
|
version "4.2.17"
|
||||||
resolved "https://registry.yarnpkg.com/react-tooltip/-/react-tooltip-4.2.14.tgz#8e06b5926fdf6672e78d8ccadaa16bef40d131d7"
|
resolved "https://registry.yarnpkg.com/react-tooltip/-/react-tooltip-4.2.17.tgz#4884ce253ab298ee395950b24b752282efa8ac5d"
|
||||||
integrity sha512-hS2kAlpjyH5MXL9DaGKsdmEFCIEuMD2RZXkEJeNjmDe05dHpqj93o5JgpmczAgQFk099+JSsnHUDo7pIOuyMDQ==
|
integrity sha512-LzwUbQYzeRyrjbuuCbYUB0dlJpFPGPwigWS052umr1QulcF5N4czabDiWJ+Y585Q7ijvMFuBbeOvnI/azoTusw==
|
||||||
dependencies:
|
dependencies:
|
||||||
prop-types "^15.7.2"
|
prop-types "^15.7.2"
|
||||||
uuid "^7.0.3"
|
uuid "^7.0.3"
|
||||||
|
|
||||||
react-use-measure@^2.0.3:
|
react-use-measure@^2.0.4:
|
||||||
version "2.0.3"
|
version "2.0.4"
|
||||||
resolved "https://registry.yarnpkg.com/react-use-measure/-/react-use-measure-2.0.3.tgz#7b56ae3ca19ccf62326933678625a8ff6b3f90a3"
|
resolved "https://registry.yarnpkg.com/react-use-measure/-/react-use-measure-2.0.4.tgz#cb675b36eaeaf3681b94d5f5e08b2a1e081fedc9"
|
||||||
integrity sha512-57O8Os9MbgFEHuOHOXNdPmBHhXjCBIwtB3YxyrM/MgaX44a1o97Mu9YqiOA6cAF8kXIw4fO3XK0r2Taa4SqaqQ==
|
integrity sha512-7K2HIGaPMl3Q9ZQiEVjen3tRXl4UDda8LiTPy/QxP8dP2rl5gPBhf7mMH6MVjjRNv3loU7sNzey/ycPNnHVTxQ==
|
||||||
dependencies:
|
dependencies:
|
||||||
debounce "^1.2.0"
|
debounce "^1.2.0"
|
||||||
|
|
||||||
|
@ -6274,10 +6264,10 @@ react-window@^1.8.6:
|
||||||
"@babel/runtime" "^7.0.0"
|
"@babel/runtime" "^7.0.0"
|
||||||
memoize-one ">=3.1.1 <6"
|
memoize-one ">=3.1.1 <6"
|
||||||
|
|
||||||
react@^17.0.1:
|
react@^17.0.2:
|
||||||
version "17.0.1"
|
version "17.0.2"
|
||||||
resolved "https://registry.yarnpkg.com/react/-/react-17.0.1.tgz#6e0600416bd57574e3f86d92edba3d9008726127"
|
resolved "https://registry.yarnpkg.com/react/-/react-17.0.2.tgz#d0b5cc516d29eb3eee383f75b62864cfb6800037"
|
||||||
integrity sha512-lG9c9UuMHdcAexXtigOZLX8exLWkW0Ku29qPRU8uhF2R9BN96dLCt0psvzPLlHc5OWkgymP3qwTRgbnw5BKx3w==
|
integrity sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==
|
||||||
dependencies:
|
dependencies:
|
||||||
loose-envify "^1.1.0"
|
loose-envify "^1.1.0"
|
||||||
object-assign "^4.1.1"
|
object-assign "^4.1.1"
|
||||||
|
@ -6634,10 +6624,10 @@ sax@^1.2.4, sax@~1.2.4:
|
||||||
resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
|
resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
|
||||||
integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
|
integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
|
||||||
|
|
||||||
scheduler@^0.20.1:
|
scheduler@^0.20.2:
|
||||||
version "0.20.1"
|
version "0.20.2"
|
||||||
resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.20.1.tgz#da0b907e24026b01181ecbc75efdc7f27b5a000c"
|
resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.20.2.tgz#4baee39436e34aa93b4874bddcbf0fe8b8b50e91"
|
||||||
integrity sha512-LKTe+2xNJBNxu/QhHvDR14wUXHRQbVY5ZOYpOGWRzhydZUqrLb2JBvLPY7cAqFmqrWuDED0Mjk7013SZiOz6Bw==
|
integrity sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==
|
||||||
dependencies:
|
dependencies:
|
||||||
loose-envify "^1.1.0"
|
loose-envify "^1.1.0"
|
||||||
object-assign "^4.1.1"
|
object-assign "^4.1.1"
|
||||||
|
@ -6718,11 +6708,6 @@ sha.js@^2.4.0, sha.js@^2.4.8:
|
||||||
inherits "^2.0.1"
|
inherits "^2.0.1"
|
||||||
safe-buffer "^5.0.1"
|
safe-buffer "^5.0.1"
|
||||||
|
|
||||||
shallow-equal@^1.2.1:
|
|
||||||
version "1.2.1"
|
|
||||||
resolved "https://registry.yarnpkg.com/shallow-equal/-/shallow-equal-1.2.1.tgz#4c16abfa56043aa20d050324efa68940b0da79da"
|
|
||||||
integrity sha512-S4vJDjHHMBaiZuT9NPb616CSmLf618jawtv3sufLl6ivK8WocjAo58cXwbRV1cgqxH0Qbv+iUt6m05eqEa2IRA==
|
|
||||||
|
|
||||||
shebang-command@^1.2.0:
|
shebang-command@^1.2.0:
|
||||||
version "1.2.0"
|
version "1.2.0"
|
||||||
resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea"
|
resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea"
|
||||||
|
@ -7441,6 +7426,11 @@ tslib@^2.0.1:
|
||||||
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.0.1.tgz#410eb0d113e5b6356490eec749603725b021b43e"
|
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.0.1.tgz#410eb0d113e5b6356490eec749603725b021b43e"
|
||||||
integrity sha512-SgIkNheinmEBgx1IUNirK0TUD4X9yjjBRTqqjggWCU3pUEqIk3/Uwl3yRixYKT6WjQuGiwDv4NomL3wqRCj+CQ==
|
integrity sha512-SgIkNheinmEBgx1IUNirK0TUD4X9yjjBRTqqjggWCU3pUEqIk3/Uwl3yRixYKT6WjQuGiwDv4NomL3wqRCj+CQ==
|
||||||
|
|
||||||
|
tslib@^2.1.0:
|
||||||
|
version "2.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.1.0.tgz#da60860f1c2ecaa5703ab7d39bc05b6bf988b97a"
|
||||||
|
integrity sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==
|
||||||
|
|
||||||
tsutils@^3.17.1:
|
tsutils@^3.17.1:
|
||||||
version "3.17.1"
|
version "3.17.1"
|
||||||
resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.17.1.tgz#ed719917f11ca0dee586272b2ac49e015a2dd759"
|
resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.17.1.tgz#ed719917f11ca0dee586272b2ac49e015a2dd759"
|
||||||
|
|
Loading…
Reference in New Issue