diff --git a/.github/stale.yml b/.github/stale.yml deleted file mode 100644 index 2dc5b675..00000000 --- a/.github/stale.yml +++ /dev/null @@ -1,19 +0,0 @@ -# Number of days of inactivity before an issue becomes stale -daysUntilStale: 60 -# Number of days of inactivity before a stale issue is closed -daysUntilClose: 7 -# Issues with these labels will never be considered stale -exemptLabels: - - pinned - - security - - enhancement - - bug -# Label to use when marking an issue as stale -staleLabel: wontfix -# Comment to post when marking an issue as stale. Set to `false` to disable -markComment: > - This issue has been automatically marked as stale because it has not had - recent activity. It will be closed if no further activity occurs. Thank you - for your contributions. -# Comment to post when closing a stale issue. Set to `false` to disable -closeComment: false diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c140f626..775f9ecf 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -16,13 +16,13 @@ jobs: strategy: matrix: include: - - node-version: 14.x + - node-version: 16.x db-type: postgresql - - node-version: 14.x + - node-version: 16.x db-type: mysql - - node-version: 16.x + - node-version: 18.x db-type: postgresql - - node-version: 16.x + - node-version: 18.x db-type: mysql steps: diff --git a/.github/workflows/stale-issues.yml b/.github/workflows/stale-issues.yml new file mode 100644 index 00000000..bf2505b1 --- /dev/null +++ b/.github/workflows/stale-issues.yml @@ -0,0 +1,22 @@ +name: Close stale issues +on: + schedule: + - cron: '30 1 * * *' + +jobs: + stale: + runs-on: ubuntu-latest + permissions: + issues: write + pull-requests: write + steps: + - uses: actions/stale@v8 + with: + days-before-issue-stale: 60 + days-before-issue-close: 7 + stale-issue-label: 'stale' + stale-issue-message: 'This issue is stale because it has been open for 60 days with no activity.' + close-issue-message: 'This issue was closed because it has been inactive for 7 days since being marked as stale.' + days-before-pr-stale: -1 + days-before-pr-close: -1 + repo-token: ${{ secrets.GITHUB_TOKEN }} diff --git a/.gitignore b/.gitignore index 7066fb28..99087ab5 100644 --- a/.gitignore +++ b/.gitignore @@ -25,6 +25,7 @@ node_modules *.iml *.log .vscode +.tool-versions # debug npm-debug.log* diff --git a/assets/bar-chart.svg b/assets/bar-chart.svg new file mode 100644 index 00000000..25a182a3 --- /dev/null +++ b/assets/bar-chart.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/components/common/UpdateNotice.js b/components/common/UpdateNotice.js index 161a5a67..bef6be98 100644 --- a/components/common/UpdateNotice.js +++ b/components/common/UpdateNotice.js @@ -1,15 +1,23 @@ -import { useState, useEffect, useCallback } from 'react'; +import { useEffect, useCallback, useState } from 'react'; import { Button, Row, Column } from 'react-basics'; import { setItem } from 'next-basics'; import useStore, { checkVersion } from 'store/version'; import { REPO_URL, VERSION_CHECK } from 'lib/constants'; import styles from './UpdateNotice.module.css'; import useMessages from 'hooks/useMessages'; +import { useRouter } from 'next/router'; -export function UpdateNotice() { +export function UpdateNotice({ user, config }) { const { formatMessage, labels, messages } = useMessages(); const { latest, checked, hasUpdate, releaseUrl } = useStore(); - const [dismissed, setDismissed] = useState(false); + const { pathname } = useRouter(); + const [dismissed, setDismissed] = useState(checked); + const allowUpdate = + user?.isAdmin && + !config?.updatesDisabled && + !config?.cloudMode && + !pathname.includes('/share/') && + !dismissed; const updateCheck = useCallback(() => { setItem(VERSION_CHECK, { version: latest, time: Date.now() }); @@ -27,12 +35,12 @@ export function UpdateNotice() { } useEffect(() => { - if (!checked) { + if (allowUpdate) { checkVersion(); } - }, [checked]); + }, [allowUpdate]); - if (!hasUpdate || dismissed) { + if (!allowUpdate || !hasUpdate) { return null; } diff --git a/components/common/UpdateNotice.module.css b/components/common/UpdateNotice.module.css index f5e29445..db7a0abd 100644 --- a/components/common/UpdateNotice.module.css +++ b/components/common/UpdateNotice.module.css @@ -4,7 +4,7 @@ gap: 20px; margin: 20px auto; justify-self: center; - background: #fff; + background: var(--base50); padding: 20px; border: 1px solid var(--base300); border-radius: var(--border-radius); @@ -15,7 +15,8 @@ display: flex; justify-content: center; align-items: center; - font-weight: 600; + color: var(--font-color100); + font-weight: 700; } .buttons { diff --git a/components/icons.ts b/components/icons.ts index efd6914b..e42b15fe 100644 --- a/components/icons.ts +++ b/components/icons.ts @@ -1,5 +1,7 @@ import { Icons } from 'react-basics'; import AddUser from 'assets/add-user.svg'; +import Bars from 'assets/bars.svg'; +import BarChart from 'assets/bar-chart.svg'; import Bolt from 'assets/bolt.svg'; import Calendar from 'assets/calendar.svg'; import Clock from 'assets/clock.svg'; @@ -22,6 +24,8 @@ import Visitor from 'assets/visitor.svg'; const icons = { ...Icons, AddUser, + Bars, + BarChart, Bolt, Calendar, Clock, diff --git a/components/input/RefreshButton.js b/components/input/RefreshButton.js index 444f3247..de7ce8cf 100644 --- a/components/input/RefreshButton.js +++ b/components/input/RefreshButton.js @@ -10,11 +10,7 @@ export function RefreshButton({ websiteId, isLoading }) { function handleClick() { if (!isLoading && dateRange) { - if (/^\d+/.test(dateRange.value)) { - setWebsiteDateRange(websiteId, dateRange.value); - } else { - setWebsiteDateRange(websiteId, dateRange); - } + setWebsiteDateRange(websiteId, dateRange); } } diff --git a/components/input/WebsiteDateFilter.js b/components/input/WebsiteDateFilter.js index 91721974..47e6f016 100644 --- a/components/input/WebsiteDateFilter.js +++ b/components/input/WebsiteDateFilter.js @@ -1,25 +1,13 @@ -import useApi from 'hooks/useApi'; import useDateRange from 'hooks/useDateRange'; import DateFilter from './DateFilter'; import styles from './WebsiteDateFilter.module.css'; export default function WebsiteDateFilter({ websiteId }) { - const { get } = useApi(); const [dateRange, setDateRange] = useDateRange(websiteId); const { value, startDate, endDate } = dateRange; const handleChange = async value => { - if (value === 'all' && websiteId) { - const data = await get(`/websites/${websiteId}`); - - if (data) { - const start = new Date(data.createdAt).getTime(); - const end = Date.now(); - setDateRange(`range:${start}:${end}`); - } - } else if (value !== 'all') { - setDateRange(value); - } + setDateRange(value); }; return ( diff --git a/components/layout/AppLayout.js b/components/layout/AppLayout.js index 45ba7e23..c30b1018 100644 --- a/components/layout/AppLayout.js +++ b/components/layout/AppLayout.js @@ -11,17 +11,14 @@ import styles from './AppLayout.module.css'; export function AppLayout({ title, children }) { const { user } = useRequireLogin(); const config = useConfig(); - const { pathname } = useRouter(); if (!user || !config) { return null; } - const allowUpdate = user?.isAdmin && !config?.updatesDisabled && !pathname.includes('/share/'); - return (
- {allowUpdate && } + {title ? `${title} | umami` : 'umami'} diff --git a/components/layout/AppLayout.module.css b/components/layout/AppLayout.module.css index a83039ce..58c1cacf 100644 --- a/components/layout/AppLayout.module.css +++ b/components/layout/AppLayout.module.css @@ -8,7 +8,6 @@ .nav { height: 60px; width: 100vw; - z-index: var(--z-index-overlay); grid-column: 1; grid-row: 1 / 2; } diff --git a/components/messages.js b/components/messages.js index d41c4430..7bd4e9bc 100644 --- a/components/messages.js +++ b/components/messages.js @@ -81,6 +81,7 @@ export const labels = defineMessages({ devices: { id: 'label.devices', defaultMessage: 'Devices' }, countries: { id: 'label.countries', defaultMessage: 'Countries' }, languages: { id: 'label.languages', defaultMessage: 'Languages' }, + event: { id: 'label.event', defaultMessage: 'Event' }, events: { id: 'label.events', defaultMessage: 'Events' }, query: { id: 'label.query', defaultMessage: 'Query' }, queryParameters: { id: 'label.query-parameters', defaultMessage: 'Query parameters' }, @@ -159,6 +160,8 @@ export const labels = defineMessages({ value: { id: 'labels.value', defaultMessage: 'Value' }, overview: { id: 'labels.overview', defaultMessage: 'Overview' }, totalRecords: { id: 'labels.total-records', defaultMessage: 'Total records' }, + insights: { id: 'label.insights', defaultMessage: 'Insights' }, + dropoff: { id: 'label.dropoff', defaultMessage: 'Dropoff' }, }); export const messages = defineMessages({ @@ -270,4 +273,8 @@ export const messages = defineMessages({ id: 'message.no-event-data', defaultMessage: 'No event data is available.', }, + newVersionAvailable: { + id: 'new-version-available', + defaultMessage: 'A new version of Umami {version} is available!', + }, }); diff --git a/components/metrics/ActiveUsers.js b/components/metrics/ActiveUsers.js index e79b977d..64051946 100644 --- a/components/metrics/ActiveUsers.js +++ b/components/metrics/ActiveUsers.js @@ -29,7 +29,7 @@ export function ActiveUsers({ websiteId, value, refetchInterval = 60000 }) { } return ( - +
{formatMessage(messages.activeUsers, { x: count })}
); diff --git a/components/metrics/ActiveUsers.module.css b/components/metrics/ActiveUsers.module.css index cc231d16..1d87fcd8 100644 --- a/components/metrics/ActiveUsers.module.css +++ b/components/metrics/ActiveUsers.module.css @@ -1,10 +1,14 @@ .container { display: flex; align-items: center; + margin-left: 20px; } .text { display: flex; + white-space: nowrap; + font-size: var(--font-size-md); + font-weight: 400; } .value { diff --git a/components/metrics/PageviewsChart.js b/components/metrics/PageviewsChart.js index 362c616e..1b481c48 100644 --- a/components/metrics/PageviewsChart.js +++ b/components/metrics/PageviewsChart.js @@ -3,7 +3,7 @@ import BarChart from './BarChart'; import { useLocale, useTheme, useMessages } from 'hooks'; import { renderDateLabels, renderStatusTooltipPopup } from 'lib/charts'; -export function PageviewsChart({ websiteId, data, unit, className, loading, ...props }) { +export function PageviewsChart({ websiteId, data, unit, loading, ...props }) { const { formatMessage, labels } = useMessages(); const { colors } = useTheme(); const { locale } = useLocale(); @@ -31,7 +31,6 @@ export function PageviewsChart({ websiteId, data, unit, className, loading, ...p get('/websites', { userId })); + const { data, isLoading, error } = useQuery(['websites'], () => + get('/websites', { userId, includeTeams: 1 }), + ); const hasData = data && data.length !== 0; const { dir } = useLocale(); diff --git a/components/pages/dashboard/DashboardSettingsButton.js b/components/pages/dashboard/DashboardSettingsButton.js index a963aa5f..99dab14f 100644 --- a/components/pages/dashboard/DashboardSettingsButton.js +++ b/components/pages/dashboard/DashboardSettingsButton.js @@ -1,4 +1,4 @@ -import { Menu, Icon, Text, PopupTrigger, Popup, Item, Button } from 'react-basics'; +import { TooltipPopup, Icon, Text, Flexbox, Popup, Item, Button } from 'react-basics'; import Icons from 'components/icons'; import { saveDashboard } from 'store/dashboard'; import useMessages from 'hooks/useMessages'; @@ -6,40 +6,30 @@ import useMessages from 'hooks/useMessages'; export function DashboardSettingsButton() { const { formatMessage, labels } = useMessages(); - const menuOptions = [ - { - label: formatMessage(labels.toggleCharts), - value: 'charts', - }, - { - label: formatMessage(labels.editDashboard), - value: 'order', - }, - ]; + const handleToggleCharts = () => { + saveDashboard(state => ({ showCharts: !state.showCharts })); + }; - function handleSelect(value) { - if (value === 'charts') { - saveDashboard(state => ({ showCharts: !state.showCharts })); - } - if (value === 'order') { - saveDashboard({ editing: true }); - } - } + const handleEdit = () => { + saveDashboard({ editing: true }); + }; return ( - - + + - - - {({ label, value }) => {label}} - - - + ); } diff --git a/components/pages/event-data/EventDataTable.js b/components/pages/event-data/EventDataTable.js index 2724962f..8260ac35 100644 --- a/components/pages/event-data/EventDataTable.js +++ b/components/pages/event-data/EventDataTable.js @@ -13,14 +13,15 @@ export function EventDataTable({ data = [] }) { return ( + + {row => ( + + {row.event} + + )} + - {row => { - return ( - - {row.field} - - ); - }} + {row => row.field} {({ total }) => total.toLocaleString()} diff --git a/components/pages/event-data/EventDataValueTable.js b/components/pages/event-data/EventDataValueTable.js index 2a20c9b0..2637053e 100644 --- a/components/pages/event-data/EventDataValueTable.js +++ b/components/pages/event-data/EventDataValueTable.js @@ -5,14 +5,14 @@ import Icons from 'components/icons'; import PageHeader from 'components/layout/PageHeader'; import Empty from 'components/common/Empty'; -export function EventDataTable({ data = [], field }) { +export function EventDataValueTable({ data = [], event }) { const { formatMessage, labels } = useMessages(); const { resolveUrl } = usePageQuery(); const Title = () => { return ( <> - + - {field} + {event} ); }; @@ -31,6 +31,7 @@ export function EventDataTable({ data = [], field }) { {data.length <= 0 && } {data.length > 0 && ( + {({ total }) => total.toLocaleString()} @@ -41,4 +42,4 @@ export function EventDataTable({ data = [], field }) { ); } -export default EventDataTable; +export default EventDataValueTable; diff --git a/components/pages/realtime/RealtimeCountries.js b/components/pages/realtime/RealtimeCountries.js index 525eb28f..62964eab 100644 --- a/components/pages/realtime/RealtimeCountries.js +++ b/components/pages/realtime/RealtimeCountries.js @@ -1,17 +1,26 @@ import { useCallback } from 'react'; +import { useRouter } from 'next/router'; import DataTable from 'components/metrics/DataTable'; import useLocale from 'hooks/useLocale'; import useCountryNames from 'hooks/useCountryNames'; import useMessages from 'hooks/useMessages'; +import classNames from 'classnames'; +import styles from './RealtimeCountries.module.css'; export function RealtimeCountries({ data }) { const { formatMessage, labels } = useMessages(); const { locale } = useLocale(); const countryNames = useCountryNames(locale); + const { basePath } = useRouter(); const renderCountryName = useCallback( - ({ x }) => {countryNames[x]}, - [countryNames, locale], + ({ x: code }) => ( + + {code} + {countryNames[code]} + + ), + [countryNames, locale, basePath], ); return ( diff --git a/components/pages/realtime/RealtimeCountries.module.css b/components/pages/realtime/RealtimeCountries.module.css new file mode 100644 index 00000000..e55063c3 --- /dev/null +++ b/components/pages/realtime/RealtimeCountries.module.css @@ -0,0 +1,5 @@ +.row { + display: flex; + align-items: center; + gap: 10px; +} diff --git a/components/pages/realtime/RealtimeLog.js b/components/pages/realtime/RealtimeLog.js index fe12963c..744bff00 100644 --- a/components/pages/realtime/RealtimeLog.js +++ b/components/pages/realtime/RealtimeLog.js @@ -52,7 +52,7 @@ export function RealtimeLog({ data, websiteDomain }) { const getTime = ({ createdAt }) => dateFormat(new Date(createdAt), 'pp', locale); - const getColor = ({ sessionId }) => stringToColor(sessionId); + const getColor = ({ id, sessionId }) => stringToColor(sessionId || id); const getIcon = ({ __type }) => icons[__type]; diff --git a/components/pages/realtime/RealtimePage.js b/components/pages/realtime/RealtimePage.js index 2d2eceba..507c123c 100644 --- a/components/pages/realtime/RealtimePage.js +++ b/components/pages/realtime/RealtimePage.js @@ -93,9 +93,7 @@ export function RealtimePage({ websiteId }) { -
- -
+ diff --git a/components/pages/reports/event-data/FieldAddForm.js b/components/pages/reports/FieldAddForm.js similarity index 86% rename from components/pages/reports/event-data/FieldAddForm.js rename to components/pages/reports/FieldAddForm.js index c95fcac3..e8831247 100644 --- a/components/pages/reports/event-data/FieldAddForm.js +++ b/components/pages/reports/FieldAddForm.js @@ -1,10 +1,10 @@ import { useState } from 'react'; import { createPortal } from 'react-dom'; import { REPORT_PARAMETERS } from 'lib/constants'; -import PopupForm from '../PopupForm'; -import FieldSelectForm from '../FieldSelectForm'; -import FieldAggregateForm from '../FieldAggregateForm'; -import FieldFilterForm from '../FieldFilterForm'; +import PopupForm from './PopupForm'; +import FieldSelectForm from './FieldSelectForm'; +import FieldAggregateForm from './FieldAggregateForm'; +import FieldFilterForm from './FieldFilterForm'; import styles from './FieldAddForm.module.css'; export function FieldAddForm({ fields = [], group, element, onAdd, onClose }) { diff --git a/components/pages/reports/event-data/FieldAddForm.module.css b/components/pages/reports/FieldAddForm.module.css similarity index 100% rename from components/pages/reports/event-data/FieldAddForm.module.css rename to components/pages/reports/FieldAddForm.module.css diff --git a/components/pages/reports/FieldAggregateForm.js b/components/pages/reports/FieldAggregateForm.js index cdcbdacc..abd1dbd9 100644 --- a/components/pages/reports/FieldAggregateForm.js +++ b/components/pages/reports/FieldAggregateForm.js @@ -19,6 +19,10 @@ export default function FieldAggregateForm({ name, type, onSelect }) { { label: formatMessage(labels.total), value: 'total' }, { label: formatMessage(labels.unique), value: 'unique' }, ], + uuid: [ + { label: formatMessage(labels.total), value: 'total' }, + { label: formatMessage(labels.unique), value: 'unique' }, + ], }; const items = options[type]; diff --git a/components/pages/reports/FieldSelectForm.js b/components/pages/reports/FieldSelectForm.js index 1ff6412a..0e41ea1f 100644 --- a/components/pages/reports/FieldSelectForm.js +++ b/components/pages/reports/FieldSelectForm.js @@ -9,10 +9,10 @@ export default function FieldSelectForm({ fields, onSelect }) {
onSelect(fields[key])}> - {fields.map(({ name, type }, index) => { + {fields.map(({ label, name, type }, index) => { return ( -
{name}
+
{label || name}
{type}
); diff --git a/components/pages/reports/ReportTemplates.js b/components/pages/reports/ReportTemplates.js index 35ba6f01..c1e0acdf 100644 --- a/components/pages/reports/ReportTemplates.js +++ b/components/pages/reports/ReportTemplates.js @@ -3,20 +3,10 @@ import { Button, Icons, Text, Icon } from 'react-basics'; import Page from 'components/layout/Page'; import PageHeader from 'components/layout/PageHeader'; import Funnel from 'assets/funnel.svg'; -import Nodes from 'assets/nodes.svg'; import Lightbulb from 'assets/lightbulb.svg'; import styles from './ReportTemplates.module.css'; import { useMessages } from 'hooks'; -const reports = [ - { - title: 'Funnel', - description: 'Understand the conversion and drop-off rate of users.', - url: '/reports/funnel', - icon: , - }, -]; - function ReportItem({ title, description, url, icon }) { return (
@@ -42,6 +32,21 @@ function ReportItem({ title, description, url, icon }) { export function ReportTemplates() { const { formatMessage, labels } = useMessages(); + const reports = [ + { + title: formatMessage(labels.insights), + description: 'Dive deeper into your data by using segments and filters.', + url: '/reports/insights', + icon: , + }, + { + title: formatMessage(labels.funnel), + description: 'Understand the conversion and drop-off rate of users.', + url: '/reports/funnel', + icon: , + }, + ]; + return ( diff --git a/components/pages/reports/event-data/EventDataParameters.js b/components/pages/reports/event-data/EventDataParameters.js index 09358be2..8d4dbb62 100644 --- a/components/pages/reports/event-data/EventDataParameters.js +++ b/components/pages/reports/event-data/EventDataParameters.js @@ -5,7 +5,7 @@ import { ReportContext } from 'components/pages/reports/Report'; import Empty from 'components/common/Empty'; import { DATA_TYPES, REPORT_PARAMETERS } from 'lib/constants'; import Icons from 'components/icons'; -import FieldAddForm from './FieldAddForm'; +import FieldAddForm from '../FieldAddForm'; import BaseParameters from '../BaseParameters'; import ParameterList from '../ParameterList'; import styles from './EventDataParameters.module.css'; @@ -54,9 +54,11 @@ export function EventDataParameters() { }; const handleAdd = (group, value) => { - const data = parameterData[group].filter(({ name }) => name !== value.name); + const data = parameterData[group]; - updateReport({ parameters: { [group]: data.concat(value) } }); + if (!data.find(({ name }) => name === value.name)) { + updateReport({ parameters: { [group]: data.concat(value) } }); + } }; const handleRemove = (group, index) => { diff --git a/components/pages/reports/funnel/FunnelTable.js b/components/pages/reports/funnel/FunnelTable.js index ff6bdfb5..9ae8ab58 100644 --- a/components/pages/reports/funnel/FunnelTable.js +++ b/components/pages/reports/funnel/FunnelTable.js @@ -6,13 +6,12 @@ import { ReportContext } from '../Report'; export function FunnelTable() { const { report } = useContext(ReportContext); const { formatMessage, labels } = useMessages(); - return ( ); } diff --git a/components/pages/reports/insights/FieldAddForm.js b/components/pages/reports/insights/FieldAddForm.js deleted file mode 100644 index c95fcac3..00000000 --- a/components/pages/reports/insights/FieldAddForm.js +++ /dev/null @@ -1,44 +0,0 @@ -import { useState } from 'react'; -import { createPortal } from 'react-dom'; -import { REPORT_PARAMETERS } from 'lib/constants'; -import PopupForm from '../PopupForm'; -import FieldSelectForm from '../FieldSelectForm'; -import FieldAggregateForm from '../FieldAggregateForm'; -import FieldFilterForm from '../FieldFilterForm'; -import styles from './FieldAddForm.module.css'; - -export function FieldAddForm({ fields = [], group, element, onAdd, onClose }) { - const [selected, setSelected] = useState(); - - const handleSelect = value => { - const { type } = value; - - if (group === REPORT_PARAMETERS.groups || type === 'array' || type === 'boolean') { - value.value = group === REPORT_PARAMETERS.groups ? '' : 'total'; - handleSave(value); - return; - } - - setSelected(value); - }; - - const handleSave = value => { - onAdd(group, value); - onClose(); - }; - - return createPortal( - - {!selected && } - {selected && group === REPORT_PARAMETERS.fields && ( - - )} - {selected && group === REPORT_PARAMETERS.filters && ( - - )} - , - document.body, - ); -} - -export default FieldAddForm; diff --git a/components/pages/reports/insights/FieldAddForm.module.css b/components/pages/reports/insights/FieldAddForm.module.css deleted file mode 100644 index 5c5aaa4f..00000000 --- a/components/pages/reports/insights/FieldAddForm.module.css +++ /dev/null @@ -1,38 +0,0 @@ -.menu { - width: 360px; - max-height: 300px; - overflow: auto; -} - -.item { - display: flex; - flex-direction: row; - justify-content: space-between; - border-radius: var(--border-radius); -} - -.item:hover { - background: var(--base75); -} - -.type { - color: var(--font-color300); -} - -.selected { - font-weight: bold; -} - -.popup { - display: flex; -} - -.filter { - display: flex; - flex-direction: column; - gap: 20px; -} - -.dropdown { - min-width: 60px; -} diff --git a/components/pages/reports/insights/InsightsParameters.js b/components/pages/reports/insights/InsightsParameters.js index 39bfc2e8..b87a566d 100644 --- a/components/pages/reports/insights/InsightsParameters.js +++ b/components/pages/reports/insights/InsightsParameters.js @@ -1,42 +1,22 @@ import { useContext, useRef } from 'react'; -import { useApi, useMessages } from 'hooks'; +import { useMessages } from 'hooks'; import { Form, FormRow, FormButtons, SubmitButton, PopupTrigger, Icon, Popup } from 'react-basics'; import { ReportContext } from 'components/pages/reports/Report'; -import Empty from 'components/common/Empty'; -import { DATA_TYPES, REPORT_PARAMETERS } from 'lib/constants'; +import { REPORT_PARAMETERS, WEBSITE_EVENT_FIELDS } from 'lib/constants'; import Icons from 'components/icons'; -import FieldAddForm from './FieldAddForm'; import BaseParameters from '../BaseParameters'; +import FieldAddForm from '../FieldAddForm'; import ParameterList from '../ParameterList'; import styles from './InsightsParameters.module.css'; -function useFields(websiteId, startDate, endDate) { - const { get, useQuery } = useApi(); - const { data, error, isLoading } = useQuery( - ['fields', websiteId, startDate, endDate], - () => - get('/reports/event-data', { - websiteId, - startAt: +startDate, - endAt: +endDate, - }), - { enabled: !!(websiteId && startDate && endDate) }, - ); - - return { data, error, isLoading }; -} - export function InsightsParameters() { const { report, runReport, updateReport, isRunning } = useContext(ReportContext); - const { formatMessage, labels, messages } = useMessages(); + const { formatMessage, labels } = useMessages(); const ref = useRef(null); const { parameters } = report || {}; const { websiteId, dateRange, fields, filters, groups } = parameters || {}; - const { startDate, endDate } = dateRange || {}; const queryEnabled = websiteId && dateRange && fields?.length; - const { data, error } = useFields(websiteId, startDate, endDate); - const parametersSelected = websiteId && startDate && endDate; - const hasData = data?.length !== 0; + const fieldOptions = Object.keys(WEBSITE_EVENT_FIELDS).map(key => WEBSITE_EVENT_FIELDS[key]); const parameterGroups = [ { label: formatMessage(labels.fields), group: REPORT_PARAMETERS.fields }, @@ -78,10 +58,7 @@ export function InsightsParameters() { {(close, element) => { return ( ({ - name: eventKey, - type: DATA_TYPES[InsightsType], - }))} + fields={fieldOptions} group={group} element={element} onAdd={handleAdd} @@ -95,50 +72,43 @@ export function InsightsParameters() { }; return ( - + - {!hasData && } - {parametersSelected && - hasData && - parameterGroups.map(({ label, group }) => { - return ( - } + {parameterGroups.map(({ label, group }) => { + return ( + }> + handleRemove(group, index)} > - handleRemove(group, index)} - > - {({ name, value }) => { - return ( -
- {group === REPORT_PARAMETERS.fields && ( - <> -
{name}
-
{value}
- - )} - {group === REPORT_PARAMETERS.filters && ( - <> -
{name}
-
{value[0]}
-
{value[1]}
- - )} - {group === REPORT_PARAMETERS.groups && ( - <> -
{name}
- - )} -
- ); - }} -
-
- ); - })} + {({ name, value }) => { + return ( +
+ {group === REPORT_PARAMETERS.fields && ( + <> +
{name}
+
{value}
+ + )} + {group === REPORT_PARAMETERS.filters && ( + <> +
{name}
+
{value[0]}
+
{value[1]}
+ + )} + {group === REPORT_PARAMETERS.groups && ( + <> +
{name}
+ + )} +
+ ); + }} + +
+ ); + })} {formatMessage(labels.runQuery)} diff --git a/components/pages/settings/websites/ShareUrl.js b/components/pages/settings/websites/ShareUrl.js index 2dad1d18..7f0b352c 100644 --- a/components/pages/settings/websites/ShareUrl.js +++ b/components/pages/settings/websites/ShareUrl.js @@ -10,6 +10,7 @@ import { } from 'react-basics'; import { useEffect, useMemo, useRef, useState } from 'react'; import { getRandomChars } from 'next-basics'; +import { useRouter } from 'next/router'; import useApi from 'hooks/useApi'; import useMessages from 'hooks/useMessages'; @@ -20,12 +21,16 @@ export function ShareUrl({ websiteId, data, onSave }) { const { name, shareId } = data; const [id, setId] = useState(shareId); const { post, useMutation } = useApi(); + const { basePath } = useRouter(); const { mutate, error } = useMutation(({ shareId }) => post(`/websites/${websiteId}`, { shareId }), ); const ref = useRef(null); const url = useMemo( - () => `${process.env.analyticsUrl || location.origin}/share/${id}/${encodeURIComponent(name)}`, + () => + `${process.env.analyticsUrl || location.origin}${basePath}/share/${id}/${encodeURIComponent( + name, + )}`, [id, name], ); diff --git a/components/pages/websites/WebsiteChart.js b/components/pages/websites/WebsiteChart.js index 12b8ab4b..fac0fb37 100644 --- a/components/pages/websites/WebsiteChart.js +++ b/components/pages/websites/WebsiteChart.js @@ -1,7 +1,7 @@ import { useMemo } from 'react'; import PageviewsChart from 'components/metrics/PageviewsChart'; import { useApi, useDateRange, useTimezone, usePageQuery } from 'hooks'; -import { getDateArray, getDateLength } from 'lib/date'; +import { getDateArray } from 'lib/date'; export function WebsiteChart({ websiteId }) { const [dateRange] = useDateRange(websiteId); @@ -43,17 +43,9 @@ export function WebsiteChart({ websiteId }) { }; } return { pageviews: [], sessions: [] }; - }, [data, startDate, endDate, unit, modified]); + }, [data, startDate, endDate, unit]); - return ( - - ); + return ; } export default WebsiteChart; diff --git a/components/pages/websites/WebsiteChartList.js b/components/pages/websites/WebsiteChartList.js index 42079a53..62b05a4d 100644 --- a/components/pages/websites/WebsiteChartList.js +++ b/components/pages/websites/WebsiteChartList.js @@ -41,7 +41,7 @@ export default function WebsiteChartList({ websites, showCharts, limit }) { - + {showCharts && }
) : null; })} diff --git a/components/pages/websites/WebsiteEventData.js b/components/pages/websites/WebsiteEventData.js index 7dc68d41..7f9a6829 100644 --- a/components/pages/websites/WebsiteEventData.js +++ b/components/pages/websites/WebsiteEventData.js @@ -5,18 +5,18 @@ import { EventDataMetricsBar } from 'components/pages/event-data/EventDataMetric import { useDateRange, useApi, usePageQuery } from 'hooks'; import styles from './WebsiteEventData.module.css'; -function useFields(websiteId, field) { +function useData(websiteId, event) { const [dateRange] = useDateRange(websiteId); const { startDate, endDate } = dateRange; const { get, useQuery } = useApi(); const { data, error, isLoading } = useQuery( - ['event-data:fields', { websiteId, startDate, endDate, field }], + ['event-data:events', { websiteId, startDate, endDate, event }], () => - get('/event-data/fields', { + get('/event-data/events', { websiteId, startAt: +startDate, endAt: +endDate, - field, + event, }), { enabled: !!(websiteId && startDate && endDate) }, ); @@ -26,15 +26,15 @@ function useFields(websiteId, field) { export default function WebsiteEventData({ websiteId }) { const { - query: { view }, + query: { event }, } = usePageQuery(); - const { data } = useFields(websiteId, view); + const { data } = useData(websiteId, event); return ( - {!view && } - {view && } + {!event && } + {event && } ); } diff --git a/components/pages/websites/WebsiteHeader.js b/components/pages/websites/WebsiteHeader.js index 76f4e4f7..0790397f 100644 --- a/components/pages/websites/WebsiteHeader.js +++ b/components/pages/websites/WebsiteHeader.js @@ -4,9 +4,9 @@ import Link from 'next/link'; import { useRouter } from 'next/router'; import Favicon from 'components/common/Favicon'; import ActiveUsers from 'components/metrics/ActiveUsers'; -import styles from './WebsiteHeader.module.css'; import Icons from 'components/icons'; import { useMessages, useWebsite } from 'hooks'; +import styles from './WebsiteHeader.module.css'; export function WebsiteHeader({ websiteId, showLinks = true, children }) { const { formatMessage, labels } = useMessages(); @@ -42,11 +42,11 @@ export function WebsiteHeader({ websiteId, showLinks = true, children }) { {name} + - {showLinks && ( - +
{links.map(({ label, icon, path }) => { const selected = path ? pathname.endsWith(path) : pathname === '/websites/[id]'; @@ -58,13 +58,13 @@ export function WebsiteHeader({ websiteId, showLinks = true, children }) { [styles.selected]: selected, })} > - {icon} - {label} + {icon} + {label} ); })} - +
)} {children}
diff --git a/components/pages/websites/WebsiteHeader.module.css b/components/pages/websites/WebsiteHeader.module.css index 89f78e52..93e622d9 100644 --- a/components/pages/websites/WebsiteHeader.module.css +++ b/components/pages/websites/WebsiteHeader.module.css @@ -27,3 +27,29 @@ .selected { font-weight: bold; } + +.links { + display: flex; + flex-direction: row; + align-items: center; +} + +@media only screen and (max-width: 768px) { + .links { + justify-content: space-evenly; + flex: 1; + border-bottom: 1px solid var(--base300); + padding-bottom: 10px; + margin-bottom: 10px; + } + + .label { + display: none; + } + + .icon, + .icon svg { + width: 30px; + height: 30px; + } +} diff --git a/db/clickhouse/schema.sql b/db/clickhouse/schema.sql index a33db3c4..94b560c3 100644 --- a/db/clickhouse/schema.sql +++ b/db/clickhouse/schema.sql @@ -6,7 +6,7 @@ CREATE TABLE umami.website_event website_id UUID, session_id UUID, event_id UUID, - --session + --sessions hostname LowCardinality(String), browser LowCardinality(String), os LowCardinality(String), @@ -17,14 +17,14 @@ CREATE TABLE umami.website_event subdivision1 LowCardinality(String), subdivision2 LowCardinality(String), city String, - --pageview + --pageviews url_path String, url_query String, referrer_path String, referrer_query String, referrer_domain String, page_title String, - --event + --events event_type UInt32, event_name String, created_at DateTime('UTC'), @@ -38,7 +38,7 @@ CREATE TABLE umami.website_event_queue ( website_id UUID, session_id UUID, event_id UUID, - --session + --sessions hostname LowCardinality(String), browser LowCardinality(String), os LowCardinality(String), @@ -49,14 +49,14 @@ CREATE TABLE umami.website_event_queue ( subdivision1 LowCardinality(String), subdivision2 LowCardinality(String), city String, - --pageview + --pageviews url_path String, url_query String, referrer_path String, referrer_query String, referrer_domain String, page_title String, - --event + --events event_type UInt32, event_name String, created_at DateTime('UTC'), @@ -66,11 +66,11 @@ CREATE TABLE umami.website_event_queue ( ) ENGINE = Kafka SETTINGS kafka_broker_list = 'domain:9092,domain:9093,domain:9094', -- input broker list - kafka_topic_list = 'event', + kafka_topic_list = 'events', kafka_group_name = 'event_consumer_group', kafka_format = 'JSONEachRow', kafka_max_block_size = 1048576, - kafka_handle_error_mode = 'stream' + kafka_handle_error_mode = 'stream'; CREATE MATERIALIZED VIEW umami.website_event_queue_mv TO umami.website_event AS SELECT website_id, @@ -108,7 +108,7 @@ SETTINGS index_granularity = 8192 AS SELECT _error AS error, _raw_message AS raw FROM umami.website_event_queue -WHERE length(_error) > 0 +WHERE length(_error) > 0; CREATE TABLE umami.event_data ( @@ -151,7 +151,7 @@ SETTINGS kafka_broker_list = 'domain:9092,domain:9093,domain:9094', -- input bro kafka_group_name = 'event_data_consumer_group', kafka_format = 'JSONEachRow', kafka_max_block_size = 1048576, - kafka_handle_error_mode = 'stream' + kafka_handle_error_mode = 'stream'; CREATE MATERIALIZED VIEW umami.event_data_queue_mv TO umami.event_data AS SELECT website_id, @@ -178,4 +178,4 @@ SETTINGS index_granularity = 8192 AS SELECT _error AS error, _raw_message AS raw FROM umami.event_data_queue -WHERE length(_error) > 0 \ No newline at end of file +WHERE length(_error) > 0; \ No newline at end of file diff --git a/db/mysql/schema.prisma b/db/mysql/schema.prisma index 98ee8ae0..a25405df 100644 --- a/db/mysql/schema.prisma +++ b/db/mysql/schema.prisma @@ -97,8 +97,8 @@ model WebsiteEvent { model EventData { id String @id() @map("event_data_id") @db.VarChar(36) - websiteEventId String @map("website_event_id") @db.VarChar(36) websiteId String @map("website_id") @db.VarChar(36) + websiteEventId String @map("website_event_id") @db.VarChar(36) eventKey String @map("event_key") @db.VarChar(500) stringValue String? @map("string_value") @db.VarChar(500) numberValue Decimal? @map("number_value") @db.Decimal(19, 4) diff --git a/hooks/useConfig.js b/hooks/useConfig.js index 6dda7b74..2dead15a 100644 --- a/hooks/useConfig.js +++ b/hooks/useConfig.js @@ -21,7 +21,7 @@ export function useConfig() { } }, []); - return config || {}; + return config; } export default useConfig; diff --git a/hooks/useDateRange.js b/hooks/useDateRange.js index 17552805..1e1b0616 100644 --- a/hooks/useDateRange.js +++ b/hooks/useDateRange.js @@ -1,20 +1,43 @@ -import { parseDateRange } from 'lib/date'; +import { getMinimumUnit, parseDateRange } from 'lib/date'; import { setItem } from 'next-basics'; import { DATE_RANGE_CONFIG, DEFAULT_DATE_RANGE } from 'lib/constants'; import useLocale from './useLocale'; import websiteStore, { setWebsiteDateRange } from 'store/websites'; import appStore, { setDateRange } from 'store/app'; +import useApi from './useApi'; export function useDateRange(websiteId) { + const { get } = useApi(); const { locale } = useLocale(); const websiteConfig = websiteStore(state => state[websiteId]?.dateRange); const defaultConfig = DEFAULT_DATE_RANGE; const globalConfig = appStore(state => state.dateRange); const dateRange = parseDateRange(websiteConfig || globalConfig || defaultConfig, locale); - const saveDateRange = value => { + const saveDateRange = async value => { if (websiteId) { - setWebsiteDateRange(websiteId, value); + let dateRange = value; + + if (typeof value === 'string') { + if (value === 'all') { + const result = await get(`/websites/${websiteId}/daterange`); + const { mindate, maxdate } = result; + + const startDate = new Date(mindate); + const endDate = new Date(maxdate); + + dateRange = { + startDate, + endDate, + unit: getMinimumUnit(startDate, endDate), + value, + }; + } else { + dateRange = parseDateRange(value, locale); + } + } + + setWebsiteDateRange(websiteId, dateRange); } else { setItem(DATE_RANGE_CONFIG, value); setDateRange(value); diff --git a/hooks/useFilters.js b/hooks/useFilters.js index ae01aadb..51268382 100644 --- a/hooks/useFilters.js +++ b/hooks/useFilters.js @@ -24,6 +24,7 @@ export function useFilters() { boolean: ['t', 'f'], number: ['eq', 'neq', 'gt', 'lt', 'gte', 'lte'], date: ['be', 'af'], + uuid: ['eq'], }; return { filters, types }; diff --git a/lang/am-ET.json b/lang/am-ET.json index 66e0bc6f..9ae8ab4e 100644 --- a/lang/am-ET.json +++ b/lang/am-ET.json @@ -42,6 +42,7 @@ "label.edit": "Edit", "label.edit-dashboard": "Edit dashboard", "label.enable-share-url": "Enable share URL", + "label.event": "Event", "label.event-data": "Event Data", "label.events": "Events", "label.field": "Field", diff --git a/lang/ar-SA.json b/lang/ar-SA.json index 0e7408b3..0919b203 100644 --- a/lang/ar-SA.json +++ b/lang/ar-SA.json @@ -42,6 +42,7 @@ "label.edit": "تعديل", "label.edit-dashboard": "تعديل لوحة التحكم", "label.enable-share-url": "تفعيل مشاركة الرابط", + "label.event": "Event", "label.event-data": "Event data", "label.events": "الأحداث", "label.field": "Field", diff --git a/lang/be-BY.json b/lang/be-BY.json index 13f40a0e..05625d77 100644 --- a/lang/be-BY.json +++ b/lang/be-BY.json @@ -42,6 +42,7 @@ "label.edit": "Змяніць", "label.edit-dashboard": "Змяніць інфармацыйную панэль", "label.enable-share-url": "Дазволіць дзяліцца спасылкай", + "label.event": "Event", "label.event-data": "Event data", "label.events": "Падзеі", "label.field": "Field", diff --git a/lang/bn-BD.json b/lang/bn-BD.json index d955cfc6..e269dcae 100644 --- a/lang/bn-BD.json +++ b/lang/bn-BD.json @@ -42,6 +42,7 @@ "label.edit": "সম্পাদনা করুন", "label.edit-dashboard": "Edit dashboard", "label.enable-share-url": "শেয়ার ইউআরএল শেয়ার করুন", + "label.event": "Event", "label.event-data": "Event data", "label.events": "ঘটনা", "label.field": "Field", diff --git a/lang/ca-ES.json b/lang/ca-ES.json index 441ce6fb..ab978a0e 100644 --- a/lang/ca-ES.json +++ b/lang/ca-ES.json @@ -42,6 +42,7 @@ "label.edit": "Edita", "label.edit-dashboard": "Edit dashboard", "label.enable-share-url": "Activa l'enllaç per compartir", + "label.event": "Event", "label.event-data": "Event data", "label.events": "Esdeveniments", "label.field": "Field", diff --git a/lang/cs-CZ.json b/lang/cs-CZ.json index 21872685..34f1aade 100644 --- a/lang/cs-CZ.json +++ b/lang/cs-CZ.json @@ -42,6 +42,7 @@ "label.edit": "Upravit", "label.edit-dashboard": "Edit dashboard", "label.enable-share-url": "Povolit sdílení URL", + "label.event": "Event", "label.event-data": "Event data", "label.events": "Události", "label.field": "Field", diff --git a/lang/da-DK.json b/lang/da-DK.json index f64145dc..243b675f 100644 --- a/lang/da-DK.json +++ b/lang/da-DK.json @@ -42,6 +42,7 @@ "label.edit": "Rediger", "label.edit-dashboard": "Edit dashboard", "label.enable-share-url": "Aktivér delings-URL", + "label.event": "Event", "label.event-data": "Event data", "label.events": "Hændelser", "label.field": "Field", diff --git a/lang/de-CH.json b/lang/de-CH.json index 69864ce9..c42289a5 100644 --- a/lang/de-CH.json +++ b/lang/de-CH.json @@ -42,6 +42,7 @@ "label.edit": "Bearbeite", "label.edit-dashboard": "Dashboard bearbeite", "label.enable-share-url": "Freigab-URL aktiviere", + "label.event": "Event", "label.event-data": "Event data", "label.events": "Ereigniss", "label.field": "Field", diff --git a/lang/de-DE.json b/lang/de-DE.json index 4ce72820..fd9b4f5d 100644 --- a/lang/de-DE.json +++ b/lang/de-DE.json @@ -3,7 +3,7 @@ "label.actions": "Aktionen", "label.activity-log": "Aktivitätsverlauf", "label.add": "Add", - "label.add-description": "Add description", + "label.add-description": "Beschreibung hinzufügen", "label.add-website": "Webseite hinzufügen", "label.admin": "Administrator", "label.all": "Alle", @@ -42,7 +42,8 @@ "label.edit": "Bearbeiten", "label.edit-dashboard": "Dashboard bearbeiten", "label.enable-share-url": "Freigabe-URL aktivieren", - "label.event-data": "Event data", + "label.event": "Event", + "label.event-data": "Event daten", "label.events": "Ereignisse", "label.field": "Field", "label.fields": "Fields", @@ -74,7 +75,7 @@ "label.powered-by": "Betrieben durch {name}", "label.profile": "Profil", "label.queries": "Abfragen", - "label.query": "Query", + "label.query": "Abfrage", "label.query-parameters": "Abfrageparameter", "label.realtime": "Echtzeit", "label.referrers": "Referrer", @@ -82,15 +83,15 @@ "label.regenerate": "Erneuern", "label.regions": "Regionen", "label.remove": "Entfernen", - "label.reports": "Reports", + "label.reports": "Reporte", "label.required": "Erforderlich", "label.reset": "Zurücksetzen", "label.reset-website": "Statistik zurücksetzen", "label.role": "Rolle", - "label.run-query": "Run query", + "label.run-query": "Abfrage starten", "label.save": "Speichern", "label.screens": "Bildschirmauflösungen", - "label.select-date": "Select date", + "label.select-date": "Datum auswählen", "label.select-website": "Website auswählen", "label.sessions": "Sessions", "label.settings": "Einstellungen", @@ -124,31 +125,31 @@ "label.view-only": "View only", "label.views": "Aufrufe", "label.visitors": "Besucher", - "label.website": "Website", + "label.website": "Webseite", "label.website-id": "Webseite ID", "label.websites": "Webseiten", "label.window": "Window", "label.yesterday": "Gestern", "labels.after": "After", - "labels.average": "Average", + "labels.average": "Durchschnitt", "labels.before": "Before", "labels.breakdown": "Breakdown", "labels.contains": "Contains", - "labels.create-report": "Create report", - "labels.description": "Description", + "labels.create-report": "Report erstellen", + "labels.description": "Beschreibung", "labels.does-not-contain": "Does not contain", "labels.does-not-equal": "Does not equal", "labels.equals": "Equals", "labels.false": "False", "labels.filters": "Filters", - "labels.greater-than": "Greater than", - "labels.greater-than-equals": "Greater than or equals", - "labels.less-than": "Less than", - "labels.less-than-equals": "Less than or equals", + "labels.greater-than": "Größer als", + "labels.greater-than-equals": "Größer oder gleich", + "labels.less-than": "Kleiner als", + "labels.less-than-equals": "Kleiner oder gleich", "labels.max": "Max", "labels.min": "Min", - "labels.overview": "Overview", - "labels.sum": "Sum", + "labels.overview": "Übersicht", + "labels.sum": "Summe", "labels.total": "Total", "labels.total-records": "Total records", "labels.true": "True", @@ -184,7 +185,7 @@ "message.tracking-code": "Tracking Code", "message.user-deleted": "Benutzer gelöscht.", "message.visitor-log": "Besucher aus {country} benutzt {browser} auf {os} {device}", - "messages.no-results-found": "No results were found.", + "messages.no-results-found": "Keine Ergebnisse gefunden.", "messages.no-team-websites": "Diesem Team sind keine Websites zugeordnet.", "messages.no-websites-configured": "Es ist keine Webseite vorhanden.", "messages.team-websites-info": "Webseiten können von jedem im Team eingesehen werden." diff --git a/lang/el-GR.json b/lang/el-GR.json index 1e27fedf..960f8a0d 100644 --- a/lang/el-GR.json +++ b/lang/el-GR.json @@ -42,6 +42,7 @@ "label.edit": "Επεξεργασία", "label.edit-dashboard": "Edit dashboard", "label.enable-share-url": "Ενεργοποίηση κοινής χρήσης URL", + "label.event": "Event", "label.event-data": "Event data", "label.events": "Γεγονότα", "label.field": "Field", diff --git a/lang/en-GB.json b/lang/en-GB.json index 77f83a92..8a76cd9e 100644 --- a/lang/en-GB.json +++ b/lang/en-GB.json @@ -42,6 +42,7 @@ "label.edit": "Edit", "label.edit-dashboard": "Edit dashboard", "label.enable-share-url": "Enable share URL", + "label.event": "Event", "label.event-data": "Event data", "label.events": "Events", "label.field": "Field", diff --git a/lang/en-US.json b/lang/en-US.json index b651e8a3..79f895ce 100644 --- a/lang/en-US.json +++ b/lang/en-US.json @@ -42,6 +42,7 @@ "label.edit": "Edit", "label.edit-dashboard": "Edit dashboard", "label.enable-share-url": "Enable share URL", + "label.event": "Event", "label.event-data": "Event data", "label.events": "Events", "label.field": "Field", diff --git a/lang/es-ES.json b/lang/es-ES.json new file mode 100644 index 00000000..a9a81095 --- /dev/null +++ b/lang/es-ES.json @@ -0,0 +1,192 @@ +{ + "label.access-code": "Código de acceso", + "label.actions": "Acciones", + "label.activity-log": "Registro de actividad", + "label.add": "Añadir", + "label.add-description": "Añadir descripción", + "label.add-website": "Nuevo sitio web", + "label.admin": "Administrador", + "label.all": "Todos", + "label.all-time": "Todos los tiempos", + "label.analytics": "Analíticas", + "label.average-visit-time": "Tiempo promedio de visita", + "label.back": "Atrás", + "label.bounce-rate": "Porcentaje de rebote", + "label.browsers": "Navegadores", + "label.cancel": "Cancelar", + "label.change-password": "Cambiar contraseña", + "label.cities": "Ciudades", + "label.clear-all": "Limpiar todo", + "label.confirm": "Confirmar", + "label.confirm-password": "Confirmar contraseña", + "label.continue": "Continuar", + "label.countries": "Países", + "label.create-team": "Crear equipo", + "label.create-user": "Crear usuario", + "label.created": "Creado", + "label.current-password": "Contraseña actual", + "label.custom-range": "Intervalo personalizado", + "label.dashboard": "Panel de control", + "label.data": "Datos", + "label.date-range": "Intervalo de fechas", + "label.default-date-range": "Intervalo por defecto", + "label.delete": "Eliminar", + "label.delete-team": "Eliminar equipo", + "label.delete-user": "Eliminar usuario", + "label.delete-website": "Eliminar sitio", + "label.desktop": "Escritorio", + "label.details": "Detalles", + "label.devices": "Dispositivos", + "label.dismiss": "Ignorar", + "label.domain": "Dominio", + "label.edit": "Editar", + "label.edit-dashboard": "Editar panel", + "label.enable-share-url": "Habilitar compartir URL", + "label.event": "Evento", + "label.event-data": "Datos de evento", + "label.events": "Eventos", + "label.field": "Campo", + "label.fields": "Campos", + "label.filter-combined": "Combinado", + "label.filter-raw": "En crudo", + "label.funnel": "Funnel", + "label.join": "Unir", + "label.join-team": "Unirse al equipo", + "label.language": "Idioma", + "label.languages": "Idiomas", + "label.laptop": "Portátil", + "label.last-days": "Últimos {x} días", + "label.last-hours": "Últimas {x} horas", + "label.leave": "Abandonar", + "label.leave-team": "Abandonar equipo", + "label.login": "Iniciar sesión", + "label.logout": "Cerrar sesión", + "label.members": "Miembros", + "label.mobile": "Móvil", + "label.more": "Más", + "label.name": "Nombre", + "label.new-password": "Nueva contraseña", + "label.none": "Ninguno", + "label.operating-systems": "Sistemas operativos", + "label.owner": "Propietario", + "label.page-views": "Vistas", + "label.pages": "Páginas", + "label.password": "Contraseña", + "label.powered-by": "Con la ayuda de {name}", + "label.profile": "Perfil", + "label.queries": "Consultas", + "label.query": "Query", + "label.query-parameters": "Parámetros de petición", + "label.realtime": "Tiempo real", + "label.referrers": "Referido desde", + "label.refresh": "Actualizar", + "label.regenerate": "Regenerar", + "label.regions": "Regiones", + "label.remove": "Quitar", + "label.reports": "Reportes", + "label.required": "Obligatorio", + "label.reset": "Reiniciar", + "label.reset-website": "Reiniciar estadísticas", + "label.role": "Rol", + "label.run-query": "Ejecutar consulta", + "label.save": "Guardar", + "label.screens": "Pantallas", + "label.select-date": "Seleccionar fecha", + "label.select-website": "Seleccionar sitio web", + "label.sessions": "Sesiones", + "label.settings": "Configuraciones", + "label.share-url": "Compartir URL", + "label.single-day": "Un solo día", + "label.tablet": "Tableta", + "label.team": "Equipo", + "label.team-guest": "Invitado al equipo", + "label.team-id": "ID de equipo", + "label.team-member": "Miembro del equipo", + "label.team-owner": "Admin. del equipo", + "label.teams": "Equipos", + "label.theme": "Tema", + "label.this-month": "Este mes", + "label.this-week": "Esta semana", + "label.this-year": "Este año", + "label.timezone": "Zona horaria", + "label.title": "Título", + "label.today": "Hoy", + "label.toggle-charts": "Alternar gráficas", + "label.tracking-code": "Código de rastreo", + "label.unique-visitors": "Visitantes únicos", + "label.unknown": "Desconocida", + "label.url": "URL", + "label.urls": "URLs", + "label.user": "Usuario", + "label.username": "Nombre de usuario", + "label.users": "Usuarios", + "label.view": "Visualizar", + "label.view-details": "Ver detalles", + "label.view-only": "Ver sólo", + "label.views": "Vistas", + "label.visitors": "Visitantes", + "label.website": "Sitio web", + "label.website-id": "ID del sitio web", + "label.websites": "Sitios web", + "label.window": "Ventana", + "label.yesterday": "Ayer", + "labels.after": "Después", + "labels.average": "Media", + "labels.before": "Antes", + "labels.breakdown": "Desglose", + "labels.contains": "Contiene", + "labels.create-report": "Crear reporte", + "labels.description": "Descripciones", + "labels.does-not-contain": "No contiene", + "labels.does-not-equal": "No es igual a", + "labels.equals": "Es igual a", + "labels.false": "False", + "labels.filters": "Filtros", + "labels.greater-than": "Mayor que", + "labels.greater-than-equals": "Mayor que o igual a", + "labels.less-than": "Menor que", + "labels.less-than-equals": "Menor que o igual a", + "labels.max": "Máx", + "labels.min": "Mín", + "labels.overview": "Resumen", + "labels.sum": "Suma", + "labels.total": "Total", + "labels.total-records": "Total de registros", + "labels.true": "Verdadero", + "labels.type": "Tipo", + "labels.unique": "Único", + "labels.untitled": "Sin título", + "labels.value": "Valor", + "message.active-users": "{x} {x, plural, one {activo} other {activos}}", + "message.confirm-delete": "¿Seguro que quieres eliminar {target}?", + "message.confirm-leave": "¿Seguro que quieres abandonar {target}?", + "message.confirm-reset": "¿Seguro que quieres BORRAR las analíticas de {target}?", + "message.delete-account": "Para borrar esta cuenta, escribe {confirmation} a continuación para confirmar.", + "message.delete-website": "Para borrar este sitio web, escribe {confirmation} a continuación para confirmar.", + "message.delete-website-warning": "Toda la información relacionada será eliminada.", + "message.error": "Algo falló.", + "message.event-log": "{event} en {url}", + "message.go-to-settings": "Ir a la configuración", + "message.incorrect-username-password": "Nombre de usuario o contraseña incorrectos.", + "message.invalid-domain": "Dominio inválido", + "message.min-password-length": "Longitud mínima de {n} caracteres", + "message.no-data-available": "No hay información disponible.", + "message.no-event-data": "No hay datos de eventos disponibles.", + "message.no-match-password": "Las contraseñas no coinciden", + "message.no-teams": "No has creado ningún equipo.", + "message.no-users": "No hay usuarios.", + "message.page-not-found": "Página no encontrada", + "message.reset-website": "Para reiniciar este sitio web, escribe {confirmation} a continuación para confirmar.", + "message.reset-website-warning": "Todas las estadísticas de esta página serán eliminadas, pero el código de rastreo permanecerá intacto.", + "message.saved": "Guardado.", + "message.share-url": "Esta es la URL pública para {target}.", + "message.team-already-member": "Ya eres miembro de este equipo.", + "message.team-not-found": "Equipo no encontrado.", + "message.tracking-code": "Código de rastreo", + "message.user-deleted": "Usuario eliminado.", + "message.visitor-log": "Visitante desde {country} usando {browser} en {os} {device}", + "messages.no-results-found": "No se encontraron resultados.", + "messages.no-team-websites": "Este equipo no tiene ningún sitio web configurado.", + "messages.no-websites-configured": "No tienes ningún sitio web configurado.", + "messages.team-websites-info": "Las analíticas de tus sitios web pueden ser vistas por cualquier miembro del equipo." +} diff --git a/lang/es-MX.json b/lang/es-MX.json index f1bbb06d..55336c1c 100644 --- a/lang/es-MX.json +++ b/lang/es-MX.json @@ -42,6 +42,7 @@ "label.edit": "Editar", "label.edit-dashboard": "Editar panel", "label.enable-share-url": "Habilitar compartir URL", + "label.event": "Evento", "label.event-data": "Event data", "label.events": "Eventos", "label.field": "Field", diff --git a/lang/fa-IR.json b/lang/fa-IR.json index c9053f4e..0ccd4cd7 100644 --- a/lang/fa-IR.json +++ b/lang/fa-IR.json @@ -42,6 +42,7 @@ "label.edit": "ویرایش", "label.edit-dashboard": "Edit dashboard", "label.enable-share-url": "فعال کردن اشتراک گذاری URL", + "label.event": "Event", "label.event-data": "Event data", "label.events": "رویدادها", "label.field": "Field", diff --git a/lang/fi-FI.json b/lang/fi-FI.json index 90350eef..b1730d06 100644 --- a/lang/fi-FI.json +++ b/lang/fi-FI.json @@ -42,6 +42,7 @@ "label.edit": "Muokkaa", "label.edit-dashboard": "Edit dashboard", "label.enable-share-url": "Ota jakamisen URL-osoite käyttöön", + "label.event": "Event", "label.event-data": "Event data", "label.events": "Tapahtumat", "label.field": "Field", diff --git a/lang/fo-FO.json b/lang/fo-FO.json index bddd5e9c..460b4b14 100644 --- a/lang/fo-FO.json +++ b/lang/fo-FO.json @@ -42,6 +42,7 @@ "label.edit": "Ger broyting", "label.edit-dashboard": "Edit dashboard", "label.enable-share-url": "Virkja deili leinki", + "label.event": "Event", "label.event-data": "Event data", "label.events": "Hendingar/tiltøk", "label.field": "Field", diff --git a/lang/fr-FR.json b/lang/fr-FR.json index ff6de17b..3e3eeff9 100644 --- a/lang/fr-FR.json +++ b/lang/fr-FR.json @@ -2,8 +2,8 @@ "label.access-code": "Code d'accès", "label.actions": "Actions", "label.activity-log": "Journal d'activité", - "label.add": "Add", - "label.add-description": "Add description", + "label.add": "Ajouter", + "label.add-description": "Ajouter une description", "label.add-website": "Ajouter un site", "label.admin": "Administrateur", "label.all": "Tout", @@ -42,13 +42,14 @@ "label.edit": "Modifier", "label.edit-dashboard": "Modifier le tableau de bord", "label.enable-share-url": "Activer l'URL de partage", - "label.event-data": "Event data", + "label.event": "Event", + "label.event-data": "Données d'événements", "label.events": "Événements", - "label.field": "Field", - "label.fields": "Fields", + "label.field": "Champ", + "label.fields": "Champs", "label.filter-combined": "Combiné", "label.filter-raw": "Brut", - "label.funnel": "Funnel", + "label.funnel": "Entonnoir", "label.join": "Rejoindre", "label.join-team": "Rejoindre une équipe", "label.language": "Langue", @@ -73,24 +74,24 @@ "label.password": "Mot de passe", "label.powered-by": "Propulsé par {name}", "label.profile": "Profil", - "label.queries": "Queries", - "label.query": "Query", + "label.queries": "Requêtes", + "label.query": "Requête", "label.query-parameters": "Paramètres d'URL", "label.realtime": "Temps réel", - "label.referrers": "Sources", + "label.referrers": "Sites référents", "label.refresh": "Rafraîchir", "label.regenerate": "Régénérer", "label.regions": "Régions", "label.remove": "Retirer", - "label.reports": "Reports", + "label.reports": "Rapports", "label.required": "Requis", "label.reset": "Réinitialiser", "label.reset-website": "Réinitialiser les statistiques", "label.role": "Rôle", - "label.run-query": "Run query", + "label.run-query": "Éxécuter la requête", "label.save": "Enregistrer", "label.screens": "Résolutions d'écran", - "label.select-date": "Select date", + "label.select-date": "Choisir une période", "label.select-website": "Choisir un site", "label.sessions": "Sessions", "label.settings": "Paramètres", @@ -121,46 +122,46 @@ "label.users": "Utilisateurs", "label.view": "Voir", "label.view-details": "Voir les détails", - "label.view-only": "View only", + "label.view-only": "Consultation", "label.views": "Vues", "label.visitors": "Visiteurs", "label.website": "Website", "label.website-id": "ID de site", "label.websites": "Sites", - "label.window": "Window", + "label.window": "Fenêtre", "label.yesterday": "Hier", - "labels.after": "After", - "labels.average": "Average", - "labels.before": "Before", - "labels.breakdown": "Breakdown", - "labels.contains": "Contains", - "labels.create-report": "Create report", + "labels.after": "Après", + "labels.average": "Moyenne", + "labels.before": "Avant", + "labels.breakdown": "Répartition", + "labels.contains": "Contient", + "labels.create-report": "Créer un rapport", "labels.description": "Description", - "labels.does-not-contain": "Does not contain", - "labels.does-not-equal": "Does not equal", - "labels.equals": "Equals", - "labels.false": "False", - "labels.filters": "Filters", - "labels.greater-than": "Greater than", - "labels.greater-than-equals": "Greater than or equals", - "labels.less-than": "Less than", - "labels.less-than-equals": "Less than or equals", + "labels.does-not-contain": "Ne contient pas", + "labels.does-not-equal": "N'est pas égal", + "labels.equals": "Est égal", + "labels.false": "Faux", + "labels.filters": "Filtres", + "labels.greater-than": "Supérieur à", + "labels.greater-than-equals": "Supérieur ou égal à", + "labels.less-than": "Inférieur à", + "labels.less-than-equals": "Inférieur ou égal à", "labels.max": "Max", "labels.min": "Min", - "labels.overview": "Overview", - "labels.sum": "Sum", + "labels.overview": "Vue d'ensemble", + "labels.sum": "Somme", "labels.total": "Total", - "labels.total-records": "Total records", - "labels.true": "True", + "labels.total-records": "Nombre d'enregistrements", + "labels.true": "Vrai", "labels.type": "Type", "labels.unique": "Unique", - "labels.untitled": "Untitled", - "labels.value": "Value", + "labels.untitled": "Sans titre", + "labels.value": "Valeur", "message.active-users": "{x} {x, plural, one {visiteur} other {visiteurs}} actuellement", "message.confirm-delete": "Êtes-vous sûr de vouloir supprimer {target} ?", "message.confirm-leave": "Êtes-vous sûr de vouloir quitter {target} ?", "message.confirm-reset": "Êtes-vous sûr de vouloir réinitialiser les statistiques de {target} ?", - "message.delete-account": "To delete this account, type {confirmation} in the box below to confirm.", + "message.delete-account": "Pour supprimer ce compte, taper {confirmation} ci-dessous pour confirmer.", "message.delete-website": "Pour supprimer ce site, taper {confirmation} ci-dessous pour confirmer.", "message.delete-website-warning": "Toutes les données associées seront supprimées.", "message.error": "Un problème est survenu.", @@ -170,12 +171,12 @@ "message.invalid-domain": "Domaine invalide", "message.min-password-length": "Taille minimale de {n} caractères", "message.no-data-available": "Aucune donnée disponible.", - "message.no-event-data": "No event data is available.", + "message.no-event-data": "Aucune donnée d'événement disponible.", "message.no-match-password": "Les mots de passe ne correspondent pas", - "message.no-teams": "Vous n'avez créé aucune équipe.", - "message.no-users": "Il n'y aucun utilisateur.", + "message.no-teams": "Vous n'avez pas créé d'équipe.", + "message.no-users": "Aucun utilisateur.", "message.page-not-found": "Page non trouvée.", - "message.reset-website": "To reset this website, type {confirmation} in the box below to confirm.", + "message.reset-website": "Pour réinitialiser ce site, taper {confirmation} ci-dessous pour confirmer.", "message.reset-website-warning": "Toutes les statistiques pour ce site seront supprimées, mais votre code de suivi restera intact.", "message.saved": "Enregistré avec succès.", "message.share-url": "Les statistiques de votre site sont accessibles publiquement sur cette URL :", @@ -184,8 +185,8 @@ "message.tracking-code": "Code de suivi", "message.user-deleted": "Utilisateur supprimé.", "message.visitor-log": "Visiteur de {country} utilisant {browser} sur {os} {device}", - "messages.no-results-found": "No results were found.", + "messages.no-results-found": "Aucun résultat n'a été trouvé.", "messages.no-team-websites": "Cette équipe n'a aucun site.", - "messages.no-websites-configured": "Vous n'avez configuré aucun site.", + "messages.no-websites-configured": "Vous n'avez pas configuré de site.", "messages.team-websites-info": "Les sites peuvent être vus par tout utilisateur dans l'équipe." } diff --git a/lang/ga-ES.json b/lang/ga-ES.json index a811df48..55d74827 100644 --- a/lang/ga-ES.json +++ b/lang/ga-ES.json @@ -42,6 +42,7 @@ "label.edit": "Editar", "label.edit-dashboard": "Edit dashboard", "label.enable-share-url": "Activar URL de compartición", + "label.event": "Event", "label.event-data": "Event data", "label.events": "Eventos", "label.field": "Field", diff --git a/lang/he-IL.json b/lang/he-IL.json index ddc1a869..95e5eb44 100644 --- a/lang/he-IL.json +++ b/lang/he-IL.json @@ -42,6 +42,7 @@ "label.edit": "עריכה", "label.edit-dashboard": "Edit dashboard", "label.enable-share-url": "הפעלת URL שיתוף", + "label.event": "Event", "label.event-data": "Event data", "label.events": "אירועים", "label.field": "Field", diff --git a/lang/hi-IN.json b/lang/hi-IN.json index d203ac62..bf883529 100644 --- a/lang/hi-IN.json +++ b/lang/hi-IN.json @@ -42,6 +42,7 @@ "label.edit": "संपादित करें", "label.edit-dashboard": "Edit dashboard", "label.enable-share-url": "शेयर URL सक्षम करें", + "label.event": "Event", "label.event-data": "Event data", "label.events": "स्पर्धाएँ", "label.field": "Field", diff --git a/lang/hr-HR.json b/lang/hr-HR.json index f4163746..6ee7dca0 100644 --- a/lang/hr-HR.json +++ b/lang/hr-HR.json @@ -42,6 +42,7 @@ "label.edit": "Uredi", "label.edit-dashboard": "Edit dashboard", "label.enable-share-url": "Omogući dijeljenje poveznice", + "label.event": "Event", "label.event-data": "Podaci događaja", "label.events": "Events", "label.field": "Field", diff --git a/lang/hu-HU.json b/lang/hu-HU.json index 064ae981..4594e1ce 100644 --- a/lang/hu-HU.json +++ b/lang/hu-HU.json @@ -42,6 +42,7 @@ "label.edit": "Módosítás", "label.edit-dashboard": "Edit dashboard", "label.enable-share-url": "URL-megosztás engedélyezése", + "label.event": "Event", "label.event-data": "Event data", "label.events": "Események", "label.field": "Field", diff --git a/lang/id-ID.json b/lang/id-ID.json index bcb24eb0..d58761b3 100644 --- a/lang/id-ID.json +++ b/lang/id-ID.json @@ -42,6 +42,7 @@ "label.edit": "Sunting", "label.edit-dashboard": "Edit dashboard", "label.enable-share-url": "Aktifkan URL berbagi", + "label.event": "Event", "label.event-data": "Event data", "label.events": "Perihal", "label.field": "Field", diff --git a/lang/it-IT.json b/lang/it-IT.json index 8c4591bc..5423dc37 100644 --- a/lang/it-IT.json +++ b/lang/it-IT.json @@ -42,6 +42,7 @@ "label.edit": "Modifica", "label.edit-dashboard": "Edit dashboard", "label.enable-share-url": "Abilita URL di condivisione", + "label.event": "Event", "label.event-data": "Event data", "label.events": "Eventi", "label.field": "Field", diff --git a/lang/ja-JP.json b/lang/ja-JP.json index 07a68a9e..6246c252 100644 --- a/lang/ja-JP.json +++ b/lang/ja-JP.json @@ -42,6 +42,7 @@ "label.edit": "編集", "label.edit-dashboard": "Edit dashboard", "label.enable-share-url": "共有リンクを有効にする", + "label.event": "Event", "label.event-data": "Event data", "label.events": "イベント", "label.field": "Field", diff --git a/lang/km-KH.json b/lang/km-KH.json index c2d4920d..9fa334f8 100644 --- a/lang/km-KH.json +++ b/lang/km-KH.json @@ -42,6 +42,7 @@ "label.edit": "កែប្រែ", "label.edit-dashboard": "កែផ្ទាំងគ្រប់គ្រង", "label.enable-share-url": "បើកការចែករំលែក URL", + "label.event": "Event", "label.event-data": "Event data", "label.events": "ព្រឹត្តិការណ៍", "label.field": "Field", diff --git a/lang/ko-KR.json b/lang/ko-KR.json index 21fe7350..4579456d 100644 --- a/lang/ko-KR.json +++ b/lang/ko-KR.json @@ -42,6 +42,7 @@ "label.edit": "편집", "label.edit-dashboard": "Edit dashboard", "label.enable-share-url": "URL 공유 활성화", + "label.event": "Event", "label.event-data": "Event data", "label.events": "이벤트", "label.field": "Field", diff --git a/lang/lt-LT.json b/lang/lt-LT.json index e951bcd3..5901e3cd 100644 --- a/lang/lt-LT.json +++ b/lang/lt-LT.json @@ -42,6 +42,7 @@ "label.edit": "Redaguoti", "label.edit-dashboard": "Edit dashboard", "label.enable-share-url": "Įjungti bendrinimą su nuoroda", + "label.event": "Event", "label.event-data": "Event data", "label.events": "Įvykiai", "label.field": "Field", diff --git a/lang/mn-MN.json b/lang/mn-MN.json index 100368e3..f2f0d04e 100644 --- a/lang/mn-MN.json +++ b/lang/mn-MN.json @@ -42,6 +42,7 @@ "label.edit": "Засах", "label.edit-dashboard": "Хянах самбар засах", "label.enable-share-url": "Хуваалцах холбоос идэвхжүүлэх", + "label.event": "Event", "label.event-data": "Event data", "label.events": "Үйлдэл", "label.field": "Field", diff --git a/lang/ms-MY.json b/lang/ms-MY.json index 1fc9bce0..9b1e3c8c 100644 --- a/lang/ms-MY.json +++ b/lang/ms-MY.json @@ -42,6 +42,7 @@ "label.edit": "Edit", "label.edit-dashboard": "Edit dashboard", "label.enable-share-url": "Aktifkan url berkongsi", + "label.event": "Event", "label.event-data": "Event data", "label.events": "Peristiwa", "label.field": "Field", diff --git a/lang/nb-NO.json b/lang/nb-NO.json index 1887096b..43a65d76 100644 --- a/lang/nb-NO.json +++ b/lang/nb-NO.json @@ -42,6 +42,7 @@ "label.edit": "Rediger", "label.edit-dashboard": "Edit dashboard", "label.enable-share-url": "Aktiver delings-URL", + "label.event": "Event", "label.event-data": "Event data", "label.events": "Arrangementer", "label.field": "Field", diff --git a/lang/nl-NL.json b/lang/nl-NL.json index db5e4b7d..cc53545d 100644 --- a/lang/nl-NL.json +++ b/lang/nl-NL.json @@ -42,6 +42,7 @@ "label.edit": "Bewerken", "label.edit-dashboard": "Dashboard aanpassen", "label.enable-share-url": "Sta delen via openbare URL toe", + "label.event": "Event", "label.event-data": "Event data", "label.events": "Gebeurtenissen", "label.field": "Field", diff --git a/lang/pl-PL.json b/lang/pl-PL.json index 38b808fc..2733fdac 100644 --- a/lang/pl-PL.json +++ b/lang/pl-PL.json @@ -2,8 +2,8 @@ "label.access-code": "Kod dostępu", "label.actions": "Działania", "label.activity-log": "Dziennik aktywności", - "label.add": "Add", - "label.add-description": "Add description", + "label.add": "Dodaj", + "label.add-description": "Dodaj opis", "label.add-website": "Dodaj witrynę", "label.admin": "Administrator", "label.all": "Wszystkie", @@ -42,13 +42,14 @@ "label.edit": "Edytuj", "label.edit-dashboard": "Edytuj panel", "label.enable-share-url": "Włącz udostępnianie adresu URL", - "label.event-data": "Event data", + "label.event": "Event", + "label.event-data": "Dane zdarzenia", "label.events": "Zdarzenia", - "label.field": "Field", - "label.fields": "Fields", + "label.field": "Pole", + "label.fields": "Pola", "label.filter-combined": "Połączone", "label.filter-raw": "Surowe dane", - "label.funnel": "Funnel", + "label.funnel": "Lejek", "label.join": "Dołącz", "label.join-team": "Dołącz do zespołu", "label.language": "Język", @@ -74,23 +75,23 @@ "label.powered-by": "Obsługiwane przez {name}", "label.profile": "Profil", "label.queries": "Zapytania", - "label.query": "Query", - "label.query-parameters": "Parametry query", + "label.query": "Zapytanie", + "label.query-parameters": "Parametry zapytania", "label.realtime": "Czas rzeczywisty", "label.referrers": "Źródła odsyłające", "label.refresh": "Odśwież", "label.regenerate": "Wygeneruj ponownie", "label.regions": "Regiony", "label.remove": "Usuń", - "label.reports": "Reports", + "label.reports": "Raporty", "label.required": "Wymagany", "label.reset": "Zresetuj", "label.reset-website": "Zresetuj statystyki", "label.role": "Role", - "label.run-query": "Run query", + "label.run-query": "Uruchom zapytanie", "label.save": "Zapisz", "label.screens": "Ekrany", - "label.select-date": "Select date", + "label.select-date": "Wybierz datę", "label.select-website": "Wybierz witrynę", "label.sessions": "Sesje", "label.settings": "Ustawienia", @@ -114,54 +115,54 @@ "label.tracking-code": "Kod śledzenia", "label.unique-visitors": "Unikalni odwiedzający", "label.unknown": "Nieznany", - "label.url": "URL", - "label.urls": "URLs", + "label.url": "Link", + "label.urls": "Linki", "label.user": "Użytkownik", "label.username": "Nazwa użytkownika", "label.users": "Użytkownicy", "label.view": "Zobacz", "label.view-details": "Pokaż szczegóły", - "label.view-only": "View only", + "label.view-only": "Tylko do odczytu", "label.views": "Wyświetlenia", "label.visitors": "Odwiedzający", - "label.website": "Website", + "label.website": "Witryna", "label.website-id": "ID witryny", "label.websites": "Witryny", - "label.window": "Window", + "label.window": "Okno", "label.yesterday": "Wczoraj", - "labels.after": "After", - "labels.average": "Average", - "labels.before": "Before", - "labels.breakdown": "Breakdown", - "labels.contains": "Contains", - "labels.create-report": "Create report", - "labels.description": "Description", - "labels.does-not-contain": "Does not contain", - "labels.does-not-equal": "Does not equal", - "labels.equals": "Equals", - "labels.false": "False", - "labels.filters": "Filters", - "labels.greater-than": "Greater than", - "labels.greater-than-equals": "Greater than or equals", - "labels.less-than": "Less than", - "labels.less-than-equals": "Less than or equals", - "labels.max": "Max", + "labels.after": "Po", + "labels.average": "Średnia", + "labels.before": "Przed", + "labels.breakdown": "Rozbicie", + "labels.contains": "Zawiera", + "labels.create-report": "Stwórz raport", + "labels.description": "Opis", + "labels.does-not-contain": "Nie zawiera", + "labels.does-not-equal": "Nie jest równe", + "labels.equals": "Równe", + "labels.false": "Fałsz", + "labels.filters": "Filtry", + "labels.greater-than": "Większe niż", + "labels.greater-than-equals": "Większe niż lub równe", + "labels.less-than": "Mniejsze niż", + "labels.less-than-equals": "Mniejsze niż lub równe", + "labels.max": "Maks", "labels.min": "Min", - "labels.overview": "Overview", - "labels.sum": "Sum", - "labels.total": "Total", - "labels.total-records": "Total records", - "labels.true": "True", - "labels.type": "Type", - "labels.unique": "Unique", - "labels.untitled": "Untitled", - "labels.value": "Value", - "message.active-users": "{x} aktualnie {x, plural, one {odwiedzający} other {odwiedzających}}", + "labels.overview": "Przegląd", + "labels.sum": "Suma", + "labels.total": "W sumie", + "labels.total-records": "Suma rekordów", + "labels.true": "Prawda", + "labels.type": "Typ", + "labels.unique": "Unikalne", + "labels.untitled": "Bez tytułu", + "labels.value": "Wartość", + "message.active-users": "{x} aktualnie {x, liczba mnoga, jeden {odwiedzający} inne {odwiedzających}}", "message.confirm-delete": "Czy na pewno chcesz usunąć {target}?", "message.confirm-leave": "Czy na pewno chcesz opuścić {target}?", "message.confirm-reset": "Czy na pewno chcesz zresetować statystyki {target}?", - "message.delete-account": "To delete this account, type {confirmation} in the box below to confirm.", - "message.delete-website": "To delete this website, type {confirmation} in the box below to confirm.", + "message.delete-account": "Aby usunąć to konto, wpisz {confirmation} w polu poniżej, aby potwierdzić.", + "message.delete-website": "Aby usunąć tę stronę, wpisz {confirmation} w polu poniżej, aby potwierdzić.", "message.delete-website-warning": "Wszystkie powiązane dane również zostaną usunięte.", "message.error": "Coś poszło nie tak.", "message.event-log": "{event} na {url}", @@ -170,7 +171,7 @@ "message.invalid-domain": "Nieprawidłowa witryna", "message.min-password-length": "Minimalna długość {n} znaków", "message.no-data-available": "Brak dostępnych danych.", - "message.no-event-data": "No event data is available.", + "message.no-event-data": "Brak dostępnych danych o zdarzeniach.", "message.no-match-password": "Hasła się nie zgadzają", "message.no-teams": "Nie stworzyłeś żadnych zespołów.", "message.no-users": "Nie ma żadnych użytkowników.", @@ -184,7 +185,7 @@ "message.tracking-code": "Kod śledzenia", "message.user-deleted": "Użytkownik usunięty.", "message.visitor-log": "Odwiedzający z {country} używa {browser} na {os} {device}", - "messages.no-results-found": "No results were found.", + "messages.no-results-found": "Nie znaleziono wyników.", "messages.no-team-websites": "Ten zespół nie ma żadnych witryn internetowych.", "messages.no-websites-configured": "Nie masz skonfigurowanych żadnych witryn internetowych.", "messages.team-websites-info": "Strony internetowe mogą być przeglądane przez każdego członka zespołu." diff --git a/lang/pt-BR.json b/lang/pt-BR.json index 9a563acd..65bc973d 100644 --- a/lang/pt-BR.json +++ b/lang/pt-BR.json @@ -42,6 +42,7 @@ "label.edit": "Editar", "label.edit-dashboard": "Editar painel", "label.enable-share-url": "Ativar link de compartilhamento", + "label.event": "Evento", "label.event-data": "Event data", "label.events": "Eventos", "label.field": "Field", diff --git a/lang/pt-PT.json b/lang/pt-PT.json index 826b4dc5..4c98516c 100644 --- a/lang/pt-PT.json +++ b/lang/pt-PT.json @@ -42,6 +42,7 @@ "label.edit": "Editar", "label.edit-dashboard": "Edit dashboard", "label.enable-share-url": "Ativar link de partilha", + "label.event": "Event", "label.event-data": "Event data", "label.events": "Eventos", "label.field": "Field", diff --git a/lang/ro-RO.json b/lang/ro-RO.json index d65fb08f..776a9af5 100644 --- a/lang/ro-RO.json +++ b/lang/ro-RO.json @@ -42,6 +42,7 @@ "label.edit": "Editare", "label.edit-dashboard": "Edit dashboard", "label.enable-share-url": "Activare adresă URL de distribuire", + "label.event": "Event", "label.event-data": "Event data", "label.events": "Evenimente", "label.field": "Field", diff --git a/lang/ru-RU.json b/lang/ru-RU.json index eb56835a..3e005eec 100644 --- a/lang/ru-RU.json +++ b/lang/ru-RU.json @@ -42,6 +42,7 @@ "label.edit": "Изменить", "label.edit-dashboard": "Редактировать дашборд", "label.enable-share-url": "Разрешить делиться ссылкой", + "label.event": "Event", "label.event-data": "Event data", "label.events": "События", "label.field": "Field", diff --git a/lang/si-LK.json b/lang/si-LK.json index d23d008c..89f1c2e7 100644 --- a/lang/si-LK.json +++ b/lang/si-LK.json @@ -42,6 +42,7 @@ "label.edit": "සංස්කරණය කරන්න", "label.edit-dashboard": "Edit dashboard", "label.enable-share-url": "බෙදාගැනීමේ URL සබල කරන්න", + "label.event": "Event", "label.event-data": "සිදුවීම් දත්ත", "label.events": "Events", "label.field": "Field", diff --git a/lang/sk-SK.json b/lang/sk-SK.json index 4c09565f..e23235e5 100644 --- a/lang/sk-SK.json +++ b/lang/sk-SK.json @@ -42,6 +42,7 @@ "label.edit": "Upraviť", "label.edit-dashboard": "Edit dashboard", "label.enable-share-url": "Povoliť zdielanie URL", + "label.event": "Event", "label.event-data": "Event data", "label.events": "Udalosti", "label.field": "Field", diff --git a/lang/sl-SI.json b/lang/sl-SI.json index c991fb75..364d49eb 100644 --- a/lang/sl-SI.json +++ b/lang/sl-SI.json @@ -42,6 +42,7 @@ "label.edit": "Uredi", "label.edit-dashboard": "Edit dashboard", "label.enable-share-url": "Omogoči URL za skupno rabo", + "label.event": "Event", "label.event-data": "Event data", "label.events": "Dogodki", "label.field": "Field", diff --git a/lang/sv-SE.json b/lang/sv-SE.json index 07d1a7fe..d0a4164f 100644 --- a/lang/sv-SE.json +++ b/lang/sv-SE.json @@ -42,6 +42,7 @@ "label.edit": "Redigera", "label.edit-dashboard": "Redigera översikt", "label.enable-share-url": "Aktivera delnings-URL", + "label.event": "Event", "label.event-data": "Event data", "label.events": "Händelser", "label.field": "Field", diff --git a/lang/ta-IN.json b/lang/ta-IN.json index 99cc1c26..e8f1f1fc 100644 --- a/lang/ta-IN.json +++ b/lang/ta-IN.json @@ -42,6 +42,7 @@ "label.edit": "திருத்துதல்", "label.edit-dashboard": "Edit dashboard", "label.enable-share-url": "கள முகவரியை பகிரலாம்", + "label.event": "Event", "label.event-data": "Event data", "label.events": "நிகழ்வுகள்", "label.field": "Field", diff --git a/lang/th-TH.json b/lang/th-TH.json index e0111a84..12003434 100644 --- a/lang/th-TH.json +++ b/lang/th-TH.json @@ -42,6 +42,7 @@ "label.edit": "แก้ไข", "label.edit-dashboard": "Edit dashboard", "label.enable-share-url": "เปิดใช้งานการแชร์ลิงก์", + "label.event": "Event", "label.event-data": "Event data", "label.events": "เหตุการณ์", "label.field": "Field", diff --git a/lang/tr-TR.json b/lang/tr-TR.json index 686489ea..b3ab8eff 100644 --- a/lang/tr-TR.json +++ b/lang/tr-TR.json @@ -42,6 +42,7 @@ "label.edit": "Düzenle", "label.edit-dashboard": "Edit dashboard", "label.enable-share-url": "Anonim paylaşım URL'i aktif", + "label.event": "Event", "label.event-data": "Event data", "label.events": "Olaylar", "label.field": "Field", diff --git a/lang/uk-UA.json b/lang/uk-UA.json index d116c7ef..a7359c54 100644 --- a/lang/uk-UA.json +++ b/lang/uk-UA.json @@ -42,6 +42,7 @@ "label.edit": "Редагувати", "label.edit-dashboard": "Edit dashboard", "label.enable-share-url": "Дозволити ділитися посиланням", + "label.event": "Event", "label.event-data": "Event data", "label.events": "Події", "label.field": "Field", diff --git a/lang/ur-PK.json b/lang/ur-PK.json index e2f95fb3..8f53030f 100644 --- a/lang/ur-PK.json +++ b/lang/ur-PK.json @@ -42,6 +42,7 @@ "label.edit": "ترمیم", "label.edit-dashboard": "Edit dashboard", "label.enable-share-url": "شیئر یو آر ایل کو فعال کریں", + "label.event": "Event", "label.event-data": "Event data", "label.events": "واقعات", "label.field": "Field", diff --git a/lang/vi-VN.json b/lang/vi-VN.json index ff89a601..7fdfced1 100644 --- a/lang/vi-VN.json +++ b/lang/vi-VN.json @@ -42,6 +42,7 @@ "label.edit": "Chỉnh sửa", "label.edit-dashboard": "Edit dashboard", "label.enable-share-url": "Bật khả năng chia sẻ URL", + "label.event": "Event", "label.event-data": "Event data", "label.events": "Sự kiện", "label.field": "Field", diff --git a/lang/zh-CN.json b/lang/zh-CN.json index 33eb5d85..fe63e006 100644 --- a/lang/zh-CN.json +++ b/lang/zh-CN.json @@ -2,8 +2,8 @@ "label.access-code": "访问代码", "label.actions": "用户行为", "label.activity-log": "活动日志", - "label.add": "Add", - "label.add-description": "Add description", + "label.add": "添加", + "label.add-description": "添加描述", "label.add-website": "添加网站", "label.admin": "管理员", "label.all": "所有", @@ -42,6 +42,7 @@ "label.edit": "编辑", "label.edit-dashboard": "编辑仪表板", "label.enable-share-url": "启用共享链接", + "label.event": "Event", "label.event-data": "Event data", "label.events": "行为类别", "label.field": "Field", @@ -127,15 +128,15 @@ "label.website": "Website", "label.website-id": "网站 ID", "label.websites": "网站", - "label.window": "Window", + "label.window": "窗口", "label.yesterday": "昨天", "labels.after": "After", "labels.average": "Average", "labels.before": "Before", "labels.breakdown": "Breakdown", "labels.contains": "Contains", - "labels.create-report": "Create report", - "labels.description": "Description", + "labels.create-report": "创建报告", + "labels.description": "描述", "labels.does-not-contain": "Does not contain", "labels.does-not-equal": "Does not equal", "labels.equals": "Equals", @@ -154,14 +155,14 @@ "labels.true": "True", "labels.type": "Type", "labels.unique": "Unique", - "labels.untitled": "Untitled", + "labels.untitled": "未命名", "labels.value": "Value", "message.active-users": "当前在线 {x} 人", "message.confirm-delete": "你确定要删除 {target} 吗?", "message.confirm-leave": "你确定要离开 {target} 吗?", "message.confirm-reset": "您确定要重置 {target} 的数据吗?", - "message.delete-account": "To delete this account, type {confirmation} in the box below to confirm.", - "message.delete-website": "To delete this website, type {confirmation} in the box below to confirm.", + "message.delete-account": "确定删除该账户, 请在下面的输入框中输入 {confirmation} 进行二次确认。", + "message.delete-website": "确定删除该网站, 请在下面的输入框中输入 {confirmation} 进行二次确认。", "message.delete-website-warning": "所有相关数据将会被删除。", "message.error": "出现错误。", "message.event-log": "{event} on {url}", @@ -175,7 +176,7 @@ "message.no-teams": "你还没有创建任何团队。", "message.no-users": "没有任何用户。", "message.page-not-found": "网页未找到。", - "message.reset-website": "To reset this website, type {confirmation} in the box below to confirm.", + "message.reset-website": "确定重置该网站, 请在下面的输入框中输入 {confirmation} 进行二次确认。", "message.reset-website-warning": "本网站的所有统计数据将被删除,但您的跟踪代码将保持不变。", "message.saved": "保存成功。", "message.share-url": "这是 {target} 的共享链接。", @@ -184,7 +185,7 @@ "message.tracking-code": "跟踪代码", "message.user-deleted": "User detected.", "message.visitor-log": "来自{country}的访客在搭载 {os} 的{device}上使用 {browser} 浏览器进行访问。", - "messages.no-results-found": "No results were found.", + "messages.no-results-found": "没有找到任何结果。", "messages.no-team-websites": "这个团队没有任何网站。", "messages.no-websites-configured": "你还没有设置任何网站。", "messages.team-websites-info": "团队中的任何人都可查看网站。" diff --git a/lang/zh-TW.json b/lang/zh-TW.json index 98dbde23..2f0d0d03 100644 --- a/lang/zh-TW.json +++ b/lang/zh-TW.json @@ -42,6 +42,7 @@ "label.edit": "編輯", "label.edit-dashboard": "編輯管理面板", "label.enable-share-url": "啟用分享連結", + "label.event": "Event", "label.event-data": "Event data", "label.events": "行為類別", "label.field": "Field", diff --git a/lib/auth.ts b/lib/auth.ts index bf01a1ab..04585943 100644 --- a/lib/auth.ts +++ b/lib/auth.ts @@ -2,7 +2,7 @@ import { Report } from '@prisma/client'; import redis from '@umami/redis-client'; import debug from 'debug'; import { PERMISSIONS, ROLE_PERMISSIONS, SHARE_TOKEN_HEADER } from 'lib/constants'; -import { secret } from 'lib/crypto'; +import { secret, isUuid } from 'lib/crypto'; import { createSecureToken, ensureArray, @@ -12,8 +12,7 @@ import { } from 'next-basics'; import { getTeamUser } from 'queries'; import { getTeamWebsite, getTeamWebsiteByTeamMemberId } from 'queries/admin/teamWebsite'; -import { validate } from 'uuid'; -import { loadWebsite } from './query'; +import { loadWebsite } from './load'; import { Auth } from './types'; const log = debug('umami:auth'); @@ -108,7 +107,7 @@ export async function canUpdateWebsite({ user }: Auth, websiteId: string) { return true; } - if (!validate(websiteId)) { + if (!isUuid(websiteId)) { return false; } @@ -184,7 +183,7 @@ export async function canUpdateTeam({ user }: Auth, teamId: string) { return true; } - if (validate(teamId)) { + if (isUuid(teamId)) { const teamUser = await getTeamUser(teamId, user.id); return hasPermission(teamUser.role, PERMISSIONS.teamUpdate); @@ -198,7 +197,7 @@ export async function canDeleteTeam({ user }: Auth, teamId: string) { return true; } - if (validate(teamId)) { + if (isUuid(teamId)) { const teamUser = await getTeamUser(teamId, user.id); return hasPermission(teamUser.role, PERMISSIONS.teamDelete); @@ -212,7 +211,7 @@ export async function canDeleteTeamUser({ user }: Auth, teamId: string, removeUs return true; } - if (validate(teamId) && validate(removeUserId)) { + if (isUuid(teamId) && isUuid(removeUserId)) { if (removeUserId === user.id) { return true; } @@ -230,7 +229,7 @@ export async function canDeleteTeamWebsite({ user }: Auth, teamId: string, websi return true; } - if (validate(teamId) && validate(websiteId)) { + if (isUuid(teamId) && isUuid(websiteId)) { const teamWebsite = await getTeamWebsite(teamId, websiteId); if (teamWebsite.website.userId === user.id) { diff --git a/lib/clickhouse.ts b/lib/clickhouse.ts index eb73d83c..b3dc2c48 100644 --- a/lib/clickhouse.ts +++ b/lib/clickhouse.ts @@ -2,7 +2,6 @@ import { ClickHouse } from 'clickhouse'; import dateFormat from 'dateformat'; import debug from 'debug'; import { CLICKHOUSE } from 'lib/db'; -import { getDynamicDataType } from './dynamicData'; import { WebsiteMetricFilter } from './types'; import { FILTER_COLUMNS } from './constants'; @@ -62,49 +61,6 @@ function getDateFormat(date) { return `'${dateFormat(date, 'UTC:yyyy-mm-dd HH:MM:ss')}'`; } -function getBetweenDates(field, startAt, endAt) { - return `${field} between ${getDateFormat(startAt)} and ${getDateFormat(endAt)}`; -} - -function getEventDataFilterQuery( - filters: { - eventKey?: string; - eventValue?: string | number | boolean | Date; - }[] = [], - params: any, -) { - const query = filters.reduce((ac, cv, i) => { - const type = getDynamicDataType(cv.eventValue); - - let value = cv.eventValue; - - ac.push(`and (event_key = {eventKey${i}:String}`); - - switch (type) { - case 'number': - ac.push(`and number_value = {eventValue${i}:UInt64})`); - break; - case 'string': - ac.push(`and string_value = {eventValue${i}:String})`); - break; - case 'boolean': - ac.push(`and string_value = {eventValue${i}:String})`); - value = cv ? 'true' : 'false'; - break; - case 'date': - ac.push(`and date_value = {eventValue${i}:DateTime('UTC')})`); - break; - } - - params[`eventKey${i}`] = cv.eventKey; - params[`eventValue${i}`] = value; - - return ac; - }, []); - - return query.join('\n'); -} - function getFilterQuery(filters = {}, params = {}) { const query = Object.keys(filters).reduce((arr, key) => { const filter = filters[key]; @@ -121,36 +77,13 @@ function getFilterQuery(filters = {}, params = {}) { return query.join('\n'); } -function getFunnelQuery(urls: string[]): { - columnsQuery: string; - conditionQuery: string; - urlParams: { [key: string]: string }; -} { - return urls.reduce( - (pv, cv, i) => { - pv.columnsQuery += `\n,url_path = {url${i}:String}${ - i > 0 && urls[i - 1] ? ` AND referrer_path = {url${i - 1}:String}` : '' - }`; - pv.conditionQuery += `${i > 0 ? ',' : ''} {url${i}:String}`; - pv.urlParams[`url${i}`] = cv; - - return pv; - }, - { - columnsQuery: '', - conditionQuery: '', - urlParams: {}, - }, - ); -} - function parseFilters(filters: WebsiteMetricFilter = {}, params: any = {}) { return { filterQuery: getFilterQuery(filters, params), }; } -async function rawQuery(query, params = {}): Promise { +async function rawQuery(query: string, params: object = {}): Promise { if (process.env.LOG_QUERY) { log('QUERY:\n', query); log('PARAMETERS:\n', params); @@ -166,7 +99,7 @@ async function findUnique(data) { throw `${data.length} records found when expecting 1.`; } - return data[0] ?? null; + return findFirst(data); } async function findFirst(data) { @@ -189,10 +122,7 @@ export default { getDateStringQuery, getDateQuery, getDateFormat, - getBetweenDates, getFilterQuery, - getFunnelQuery, - getEventDataFilterQuery, parseFilters, findUnique, findFirst, diff --git a/lib/constants.ts b/lib/constants.ts index a242cce9..c275ed8d 100644 --- a/lib/constants.ts +++ b/lib/constants.ts @@ -13,12 +13,12 @@ export const REPO_URL = 'https://github.com/umami-software/umami'; export const UPDATES_URL = 'https://api.umami.is/v1/updates'; export const TELEMETRY_PIXEL = 'https://i.umami.is/a.png'; -export const DEFAULT_LOCALE = 'en-US'; +export const DEFAULT_LOCALE = process.env.defaultLocale ?? 'en-US'; export const DEFAULT_THEME = 'light'; export const DEFAULT_ANIMATION_DURATION = 300; export const DEFAULT_DATE_RANGE = '24hour'; export const DEFAULT_WEBSITE_LIMIT = 10; -export const DEFAULT_CREATED_AT = '2000-01-01'; +export const DEFAULT_RESET_DATE = '2000-01-01'; export const REALTIME_RANGE = 30; export const REALTIME_INTERVAL = 5000; @@ -120,6 +120,37 @@ export const ROLE_PERMISSIONS = { [ROLES.teamMember]: [], } as const; +export const WEBSITE_EVENT_FIELDS = { + eventId: { name: 'event_id', type: 'uuid', label: 'Event ID' }, + websiteId: { name: 'website_id', type: 'uuid', label: 'Website ID' }, + sessionId: { name: 'session_id', type: 'uuid', label: 'Session ID' }, + createdAt: { name: 'created_at', type: 'date', label: 'Created date' }, + urlPath: { name: 'url_path', type: 'string', label: 'URL path' }, + urlQuery: { name: 'url_query', type: 'string', label: 'URL query' }, + referrerPath: { name: 'referrer_path', type: 'string', label: 'Referrer path' }, + referrerQuery: { name: 'referrer_query', type: 'string', label: 'Referrer query' }, + referrerDomain: { name: 'referrer_domain', type: 'string', label: 'Referrer domain' }, + pageTitle: { name: 'page_title', type: 'string', label: 'Page title' }, + eventType: { name: 'event_type', type: 'string', label: 'Event type' }, + eventName: { name: 'event_name', type: 'string', label: 'Event name' }, +}; + +export const SESSION_FIELDS = { + sessionId: { name: 'session_id', type: 'uuid' }, + websiteId: { name: 'website_id', type: 'uuid' }, + hostname: { name: 'hostname', type: 'string' }, + browser: { name: 'browser', type: 'string' }, + os: { name: 'os', type: 'string' }, + device: { name: 'device', type: 'string' }, + screen: { name: 'screen', type: 'string' }, + language: { name: 'language', type: 'string' }, + country: { name: 'country', type: 'string' }, + subdivision1: { name: 'subdivision1', type: 'string' }, + subdivision2: { name: 'subdivision2', type: 'string' }, + city: { name: 'city', type: 'string' }, + createdAt: { name: 'created_at', type: 'date' }, +}; + export const THEME_COLORS = { light: { primary: '#2680eb', diff --git a/lib/crypto.js b/lib/crypto.js index fcd3e2c0..fefaf13f 100644 --- a/lib/crypto.js +++ b/lib/crypto.js @@ -1,7 +1,6 @@ -import crypto from 'crypto'; -import { v4, v5 } from 'uuid'; import { startOfMonth } from 'date-fns'; import { hash } from 'next-basics'; +import { v4, v5, validate } from 'uuid'; export function secret() { return hash(process.env.APP_SECRET || process.env.DATABASE_URL); @@ -16,9 +15,9 @@ export function salt() { export function uuid(...args) { if (!args.length) return v4(); - return v5(hash(...args, salt()), v5.DNS); + return v5(hash(...args), v5.DNS); } -export function md5(...args) { - return crypto.createHash('md5').update(args.join('')).digest('hex'); +export function isUuid(value) { + return validate(value); } diff --git a/lib/date.js b/lib/date.js index 526354b3..bf5dd90a 100644 --- a/lib/date.js +++ b/lib/date.js @@ -26,10 +26,20 @@ import { differenceInCalendarMonths, differenceInCalendarYears, format, - parseISO, + max, + min, + isDate, } from 'date-fns'; import { getDateLocale } from 'lib/lang'; +const dateFuncs = { + minute: [differenceInMinutes, addMinutes, startOfMinute], + hour: [differenceInHours, addHours, startOfHour], + day: [differenceInCalendarDays, addDays, startOfDay], + month: [differenceInCalendarMonths, addMonths, startOfMonth], + year: [differenceInCalendarYears, addYears, startOfYear], +}; + export function getTimezone() { return moment.tz.guess(); } @@ -43,11 +53,19 @@ export function parseDateRange(value, locale = 'en-US') { return value; } - if (value?.startsWith?.('range')) { - const [, startAt, endAt] = value.split(':'); + if (value === 'all') { + return { + startDate: new Date(0), + endDate: new Date(1), + value, + }; + } - const startDate = new Date(+startAt); - const endDate = new Date(+endAt); + if (value?.startsWith?.('range')) { + const [, startTime, endTime] = value.split(':'); + + const startDate = new Date(+startTime); + const endDate = new Date(+endTime); return { ...getDateRangeValues(startDate, endDate), @@ -148,17 +166,34 @@ export function parseDateRange(value, locale = 'en-US') { } } -export function getDateRangeValues(startDate, endDate) { - let unit = 'year'; - if (differenceInHours(endDate, startDate) <= 48) { - unit = 'hour'; +export function getAllowedUnits(startDate, endDate) { + const units = ['minute', 'hour', 'day', 'month', 'year']; + const minUnit = getMinimumUnit(startDate, endDate); + const index = units.indexOf(minUnit); + + return index >= 0 ? units.splice(index) : []; +} + +export function getMinimumUnit(startDate, endDate) { + if (differenceInMinutes(endDate, startDate) <= 60) { + return 'minute'; + } else if (differenceInHours(endDate, startDate) <= 48) { + return 'hour'; } else if (differenceInCalendarDays(endDate, startDate) <= 90) { - unit = 'day'; + return 'day'; } else if (differenceInCalendarMonths(endDate, startDate) <= 24) { - unit = 'month'; + return 'month'; } - return { startDate: startOfDay(startDate), endDate: endOfDay(endDate), unit }; + return 'year'; +} + +export function getDateRangeValues(startDate, endDate) { + return { + startDate: startOfDay(startDate), + endDate: endOfDay(endDate), + unit: getMinimumUnit(startDate, endDate), + }; } export function getDateFromString(str) { @@ -174,14 +209,6 @@ export function getDateFromString(str) { return new Date(year, month - 1, day); } -const dateFuncs = { - minute: [differenceInMinutes, addMinutes, startOfMinute], - hour: [differenceInHours, addHours, startOfHour], - day: [differenceInCalendarDays, addDays, startOfDay], - month: [differenceInCalendarMonths, addMonths, startOfMonth], - year: [differenceInCalendarYears, addYears, startOfYear], -}; - export function getDateArray(data, startDate, endDate, unit) { const arr = []; const [diff, add, normalize] = dateFuncs[unit]; @@ -227,3 +254,11 @@ export function dateFormat(date, str, locale = 'en-US') { locale: getDateLocale(locale), }); } + +export function maxDate(...args) { + return max(args.filter(n => isDate(n))); +} + +export function minDate(...args) { + return min(args.filter(n => isDate(n))); +} diff --git a/lib/db.js b/lib/db.js index 19e46a3d..750cdec0 100644 --- a/lib/db.js +++ b/lib/db.js @@ -35,3 +35,7 @@ export async function runQuery(queries) { return queries[CLICKHOUSE](); } } + +export function notImplemented() { + throw new Error('Not implemented.'); +} diff --git a/lib/detect.ts b/lib/detect.ts index 2597739b..9c1e1fa4 100644 --- a/lib/detect.ts +++ b/lib/detect.ts @@ -1,5 +1,5 @@ import path from 'path'; -import requestIp from 'request-ip'; +import { getClientIp } from 'request-ip'; import { browserName, detectOS } from 'detect-browser'; import isLocalhost from 'is-localhost-ip'; import maxmind from 'maxmind'; @@ -25,7 +25,7 @@ export function getIpAddress(req) { return req.headers['cf-connecting-ip']; } - return requestIp.getClientIp(req); + return getClientIp(req); } export function getDevice(screen, os) { @@ -62,6 +62,14 @@ export async function getLocation(ip, req) { return; } + // Cloudflare headers + if (req.headers['cf-ipcountry']) { + return { + country: req.headers['cf-ipcountry'], + }; + } + + // Vercel headers if (req.headers['x-vercel-ip-country']) { const country = req.headers['x-vercel-ip-country']; const region = req.headers['x-vercel-ip-country-region']; diff --git a/lib/kafka.ts b/lib/kafka.ts index 8f5bb87f..10326888 100644 --- a/lib/kafka.ts +++ b/lib/kafka.ts @@ -61,7 +61,7 @@ async function getProducer(): Promise { return producer; } -function getDateFormat(date, format?): string { +function getDateFormat(date: Date, format?: string): string { return dateFormat(date, format ? format : 'UTC:yyyy-mm-dd HH:MM:ss'); } diff --git a/lib/load.ts b/lib/load.ts new file mode 100644 index 00000000..4ce18b09 --- /dev/null +++ b/lib/load.ts @@ -0,0 +1,51 @@ +import cache from 'lib/cache'; +import { getWebsite, getSession, getUser } from 'queries'; +import { User, Website, Session } from '@prisma/client'; + +export async function loadWebsite(websiteId: string): Promise { + let website; + + if (cache.enabled) { + website = await cache.fetchWebsite(websiteId); + } else { + website = await getWebsite({ id: websiteId }); + } + + if (!website || website.deletedAt) { + return null; + } + + return website; +} + +export async function loadSession(sessionId: string): Promise { + let session; + + if (cache.enabled) { + session = await cache.fetchSession(sessionId); + } else { + session = await getSession({ id: sessionId }); + } + + if (!session) { + return null; + } + + return session; +} + +export async function loadUser(userId: string): Promise { + let user; + + if (cache.enabled) { + user = await cache.fetchUser(userId); + } else { + user = await getUser({ id: userId }); + } + + if (!user || user.deletedAt) { + return null; + } + + return user; +} diff --git a/lib/middleware.ts b/lib/middleware.ts index 1fd13b09..bcab71ef 100644 --- a/lib/middleware.ts +++ b/lib/middleware.ts @@ -7,11 +7,10 @@ import { } from 'next-basics'; import debug from 'debug'; import cors from 'cors'; -import { validate } from 'uuid'; import redis from '@umami/redis-client'; import { findSession } from 'lib/session'; import { getAuthToken, parseShareToken } from 'lib/auth'; -import { secret } from 'lib/crypto'; +import { secret, isUuid } from 'lib/crypto'; import { ROLES } from 'lib/constants'; import { getUser } from '../queries'; import { NextApiRequestCollect } from 'pages/api/send'; @@ -53,7 +52,7 @@ export const useAuth = createMiddleware(async (req, res, next) => { let user = null; const { userId, authKey } = payload || {}; - if (validate(userId)) { + if (isUuid(userId)) { user = await getUser({ id: userId }); } else if (redis.enabled && authKey) { user = await redis.get(authKey); @@ -73,5 +72,6 @@ export const useAuth = createMiddleware(async (req, res, next) => { } (req as any).auth = { user, token, shareToken, authKey }; + next(); }); diff --git a/lib/prisma.ts b/lib/prisma.ts index 875f5897..427578d6 100644 --- a/lib/prisma.ts +++ b/lib/prisma.ts @@ -1,7 +1,6 @@ import prisma from '@umami/prisma-client'; import moment from 'moment-timezone'; import { MYSQL, POSTGRESQL, getDatabaseType } from 'lib/db'; -import { getDynamicDataType } from './dynamicData'; import { FILTER_COLUMNS } from './constants'; const MYSQL_DATE_FORMATS = { @@ -20,19 +19,7 @@ const POSTGRESQL_DATE_FORMATS = { year: 'YYYY-01-01', }; -function toUuid(): string { - const db = getDatabaseType(process.env.DATABASE_URL); - - if (db === POSTGRESQL) { - return '::uuid'; - } - - if (db === MYSQL) { - return ''; - } -} - -function getAddMinutesQuery(field: string, minutes: number) { +function getAddMinutesQuery(field: string, minutes: number): string { const db = getDatabaseType(process.env.DATABASE_URL); if (db === POSTGRESQL) { @@ -45,7 +32,7 @@ function getAddMinutesQuery(field: string, minutes: number) { } function getDateQuery(field: string, unit: string, timezone?: string): string { - const db = getDatabaseType(process.env.DATABASE_URL); + const db = getDatabaseType(); if (db === POSTGRESQL) { if (timezone) { @@ -65,8 +52,8 @@ function getDateQuery(field: string, unit: string, timezone?: string): string { } } -function getTimestampInterval(field: string): string { - const db = getDatabaseType(process.env.DATABASE_URL); +function getTimestampIntervalQuery(field: string): string { + const db = getDatabaseType(); if (db === POSTGRESQL) { return `floor(extract(epoch from max(${field}) - min(${field})))`; @@ -77,47 +64,6 @@ function getTimestampInterval(field: string): string { } } -function getEventDataFilterQuery( - filters: { - eventKey?: string; - eventValue?: string | number | boolean | Date; - }[], - params: any[], -) { - const query = filters.reduce((ac, cv) => { - const type = getDynamicDataType(cv.eventValue); - - let value = cv.eventValue; - - ac.push(`and (event_key = $${params.length + 1}`); - params.push(cv.eventKey); - - switch (type) { - case 'number': - ac.push(`and number_value = $${params.length + 1})`); - params.push(value); - break; - case 'string': - ac.push(`and string_value = $${params.length + 1})`); - params.push(decodeURIComponent(cv.eventValue as string)); - break; - case 'boolean': - ac.push(`and string_value = $${params.length + 1})`); - params.push(decodeURIComponent(cv.eventValue as string)); - value = cv ? 'true' : 'false'; - break; - case 'date': - ac.push(`and date_value = $${params.length + 1})`); - params.push(cv.eventValue); - break; - } - - return ac; - }, []); - - return query.join('\n'); -} - function getFilterQuery(filters = {}, params = []): string { const query = Object.keys(filters).reduce((arr, key) => { const filter = filters[key]; @@ -134,53 +80,6 @@ function getFilterQuery(filters = {}, params = []): string { return query.join('\n'); } -function getFunnelQuery( - urls: string[], - windowMinutes: number, -): { - levelQuery: string; - sumQuery: string; - urlFilterQuery: string; -} { - const initParamLength = 3; - - return urls.reduce( - (pv, cv, i) => { - const levelNumber = i + 1; - const start = i > 0 ? ',' : ''; - - if (levelNumber >= 2) { - pv.levelQuery += `\n - , level${levelNumber} AS ( - select cl.*, - l0.created_at level_${levelNumber}_created_at, - l0.url_path as level_${levelNumber}_url - from level${i} cl - left join website_event l0 - on cl.session_id = l0.session_id - and l0.created_at between cl.level_${i}_created_at - and ${getAddMinutesQuery(`cl.level_${i}_created_at`, windowMinutes)} - and l0.referrer_path = $${i + initParamLength} - and l0.url_path = $${levelNumber + initParamLength} - and created_at between $2 and $3 - and website_id = $1${toUuid()} - )`; - } - - pv.sumQuery += `\n${start}SUM(CASE WHEN level_${levelNumber}_url is not null THEN 1 ELSE 0 END) AS level${levelNumber}`; - - pv.urlFilterQuery += `\n${start}$${levelNumber + initParamLength} `; - - return pv; - }, - { - levelQuery: '', - sumQuery: '', - urlFilterQuery: '', - }, - ); -} - function parseFilters( filters: { [key: string]: any } = {}, params = [], @@ -197,27 +96,30 @@ function parseFilters( }; } -async function rawQuery(query: string, params: never[] = []): Promise { - const db = getDatabaseType(process.env.DATABASE_URL); +async function rawQuery(sql: string, data: object): Promise { + const db = getDatabaseType(); + const params = []; if (db !== POSTGRESQL && db !== MYSQL) { return Promise.reject(new Error('Unknown database.')); } - const sql = db === MYSQL ? query.replace(/\$[0-9]+/g, '?') : query; + const query = sql?.replaceAll(/\{\{\s*(\w+)(::\w+)?\s*}}/g, (...args) => { + const [, name, type] = args; + params.push(data[name]); - return prisma.rawQuery(sql, params); + return db === MYSQL ? '?' : `$${params.length}${type ?? ''}`; + }); + + return prisma.rawQuery(query, params); } export default { ...prisma, getAddMinutesQuery, getDateQuery, - getTimestampInterval, + getTimestampIntervalQuery, getFilterQuery, - getFunnelQuery, - getEventDataFilterQuery, - toUuid, parseFilters, rawQuery, }; diff --git a/lib/query.ts b/lib/query.ts index 4ce18b09..88ce62d4 100644 --- a/lib/query.ts +++ b/lib/query.ts @@ -1,51 +1,31 @@ -import cache from 'lib/cache'; -import { getWebsite, getSession, getUser } from 'queries'; -import { User, Website, Session } from '@prisma/client'; +import { NextApiRequest } from 'next'; +import { getAllowedUnits, getMinimumUnit } from './date'; +import { getWebsiteDateRange } from '../queries'; -export async function loadWebsite(websiteId: string): Promise { - let website; +export async function parseDateRangeQuery(req: NextApiRequest) { + const { id: websiteId, startAt, endAt, unit } = req.query; - if (cache.enabled) { - website = await cache.fetchWebsite(websiteId); - } else { - website = await getWebsite({ id: websiteId }); + // All-time + if (+startAt === 0 && +endAt === 1) { + const result = await getWebsiteDateRange(websiteId as string); + const { min, max } = result[0]; + const startDate = new Date(min); + const endDate = new Date(max); + + return { + startDate, + endDate, + unit: getMinimumUnit(startDate, endDate), + }; } - if (!website || website.deletedAt) { - return null; - } + const startDate = new Date(+startAt); + const endDate = new Date(+endAt); + const minUnit = getMinimumUnit(startDate, endDate); - return website; -} - -export async function loadSession(sessionId: string): Promise { - let session; - - if (cache.enabled) { - session = await cache.fetchSession(sessionId); - } else { - session = await getSession({ id: sessionId }); - } - - if (!session) { - return null; - } - - return session; -} - -export async function loadUser(userId: string): Promise { - let user; - - if (cache.enabled) { - user = await cache.fetchUser(userId); - } else { - user = await getUser({ id: userId }); - } - - if (!user || user.deletedAt) { - return null; - } - - return user; + return { + startDate, + endDate, + unit: (getAllowedUnits(startDate, endDate).includes(unit as string) ? unit : minUnit) as string, + }; } diff --git a/lib/session.ts b/lib/session.ts index 29ff694f..5eb7398a 100644 --- a/lib/session.ts +++ b/lib/session.ts @@ -1,11 +1,10 @@ -import { secret, uuid } from 'lib/crypto'; +import { secret, uuid, isUuid } from 'lib/crypto'; import { getClientInfo, getJsonBody } from 'lib/detect'; import { parseToken } from 'next-basics'; import { CollectRequestBody, NextApiRequestCollect } from 'pages/api/send'; import { createSession } from 'queries'; -import { validate } from 'uuid'; import cache from './cache'; -import { loadSession, loadWebsite } from './query'; +import { loadSession, loadWebsite } from './load'; export async function findSession(req: NextApiRequestCollect) { const { payload } = getJsonBody(req); @@ -30,7 +29,13 @@ export async function findSession(req: NextApiRequestCollect) { // Verify payload const { website: websiteId, hostname, screen, language } = payload; - if (!validate(websiteId)) { + // Check the hostname value for legality to eliminate dirty data + const validHostnameRegex = /^[\w-.]+$/; + if (!validHostnameRegex.test(hostname)) { + throw new Error('Invalid hostname.'); + } + + if (!isUuid(websiteId)) { throw new Error('Invalid website ID.'); } diff --git a/lib/sql.ts b/lib/sql.ts new file mode 100644 index 00000000..e69de29b diff --git a/lib/types.ts b/lib/types.ts index 2e1ed986..7c91ec4f 100644 --- a/lib/types.ts +++ b/lib/types.ts @@ -137,3 +137,10 @@ export interface RealtimeUpdate { events: any[]; timestamp: number; } + +export interface DateRange { + startDate: Date; + endDate: Date; + unit: string; + value: string; +} diff --git a/next.config.js b/next.config.js index 0778f979..2165a6e0 100644 --- a/next.config.js +++ b/next.config.js @@ -74,6 +74,7 @@ if (process.env.CLOUD_MODE && process.env.CLOUD_URL && process.env.DISABLE_LOGIN const config = { env: { currentVersion: pkg.version, + defaultLocale: process.env.DEFAULT_LOCALE, isProduction: process.env.NODE_ENV === 'production', }, basePath: process.env.BASE_PATH, diff --git a/package.json b/package.json index 78b15ee2..bfd290fd 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "umami", - "version": "2.3.0", + "version": "2.3.1", "description": "A simple, fast, privacy-focused alternative to Google Analytics.", "author": "Mike Cao ", "license": "MIT", @@ -60,7 +60,7 @@ ], "dependencies": { "@fontsource/inter": "^4.5.15", - "@prisma/client": "4.15.0", + "@prisma/client": "5.0.0", "@tanstack/react-query": "^4.16.1", "@umami/prisma-client": "^0.2.0", "@umami/redis-client": "^0.5.0", @@ -90,7 +90,7 @@ "maxmind": "^4.3.6", "moment-timezone": "^0.5.35", "next": "13.3.1", - "next-basics": "^0.31.0", + "next-basics": "^0.35.0", "node-fetch": "^3.2.8", "npm-run-all": "^4.1.5", "react": "^18.2.0", @@ -107,7 +107,7 @@ "semver": "^7.5.2", "thenby": "^1.3.4", "timezone-support": "^2.0.2", - "uuid": "^8.3.2", + "uuid": "^9.0.0", "yup": "^0.32.11", "zustand": "^4.3.8" }, @@ -141,7 +141,7 @@ "postcss-preset-env": "7.8.3", "postcss-rtlcss": "^4.0.1", "prettier": "^2.6.2", - "prisma": "4.15.0", + "prisma": "5.0.0", "prompts": "2.4.2", "rollup": "^2.70.1", "rollup-plugin-delete": "^2.0.0", diff --git a/pages/api/event-data/events.ts b/pages/api/event-data/events.ts new file mode 100644 index 00000000..1d74c3d2 --- /dev/null +++ b/pages/api/event-data/events.ts @@ -0,0 +1,39 @@ +import { canViewWebsite } from 'lib/auth'; +import { useCors, useAuth } from 'lib/middleware'; +import { NextApiRequestQueryBody } from 'lib/types'; +import { NextApiResponse } from 'next'; +import { ok, methodNotAllowed, unauthorized } from 'next-basics'; +import { getEventDataEvents } from 'queries'; + +export interface EventDataFieldsRequestBody { + websiteId: string; + dateRange: { + startDate: string; + endDate: string; + }; +} + +export default async ( + req: NextApiRequestQueryBody, + res: NextApiResponse, +) => { + await useCors(req, res); + await useAuth(req, res); + + if (req.method === 'GET') { + const { websiteId, startAt, endAt, field, event } = req.query; + + if (!(await canViewWebsite(req.auth, websiteId))) { + return unauthorized(res); + } + + const data = await getEventDataEvents(websiteId, new Date(+startAt), new Date(+endAt), { + field, + event, + }); + + return ok(res, data); + } + + return methodNotAllowed(res); +}; diff --git a/pages/api/me/teams.ts b/pages/api/me/teams.ts new file mode 100644 index 00000000..36699016 --- /dev/null +++ b/pages/api/me/teams.ts @@ -0,0 +1,15 @@ +import { useCors } from 'lib/middleware'; +import { NextApiRequestQueryBody } from 'lib/types'; +import { NextApiResponse } from 'next'; +import { methodNotAllowed } from 'next-basics'; +import userTeams from 'pages/api/users/[id]/teams'; + +export default async (req: NextApiRequestQueryBody, res: NextApiResponse) => { + await useCors(req, res); + + if (req.method === 'GET') { + return userTeams(req, res); + } + + return methodNotAllowed(res); +}; diff --git a/pages/api/me/websites.ts b/pages/api/me/websites.ts index dc9c0d62..29f1e431 100644 --- a/pages/api/me/websites.ts +++ b/pages/api/me/websites.ts @@ -1,21 +1,18 @@ import { useAuth, useCors } from 'lib/middleware'; import { NextApiRequestQueryBody } from 'lib/types'; import { NextApiResponse } from 'next'; -import { methodNotAllowed, ok } from 'next-basics'; -import { getUserWebsites } from 'queries'; +import { methodNotAllowed } from 'next-basics'; + +import userWebsites from 'pages/api/users/[id]/websites'; export default async (req: NextApiRequestQueryBody, res: NextApiResponse) => { await useCors(req, res); await useAuth(req, res); - const { - user: { id: userId }, - } = req.auth; - if (req.method === 'GET') { - const websites = await getUserWebsites(userId); + req.query.id = req.auth.user.id; - return ok(res, websites); + return userWebsites(req, res); } return methodNotAllowed(res); diff --git a/pages/api/reports/funnel.ts b/pages/api/reports/funnel.ts index 1e121326..33882e03 100644 --- a/pages/api/reports/funnel.ts +++ b/pages/api/reports/funnel.ts @@ -3,7 +3,7 @@ import { useCors, useAuth } from 'lib/middleware'; import { NextApiRequestQueryBody } from 'lib/types'; import { NextApiResponse } from 'next'; import { ok, methodNotAllowed, unauthorized } from 'next-basics'; -import { getPageviewFunnel } from 'queries'; +import { getFunnel } from 'queries'; export interface FunnelRequestBody { websiteId: string; @@ -41,7 +41,7 @@ export default async ( return unauthorized(res); } - const data = await getPageviewFunnel(websiteId, { + const data = await getFunnel(websiteId, { startDate: new Date(startDate), endDate: new Date(endDate), urls, diff --git a/pages/api/reports/index.ts b/pages/api/reports/index.ts index b2c5da9e..fcd8fd37 100644 --- a/pages/api/reports/index.ts +++ b/pages/api/reports/index.ts @@ -1,10 +1,10 @@ -import { uuid } from 'lib/crypto'; import { useAuth, useCors } from 'lib/middleware'; import { NextApiRequestQueryBody } from 'lib/types'; import { NextApiResponse } from 'next'; import { methodNotAllowed, ok, unauthorized } from 'next-basics'; import { createReport, getReports } from 'queries'; import { canViewWebsite } from 'lib/auth'; +import { uuid } from 'lib/crypto'; export interface ReportRequestBody { websiteId: string; diff --git a/pages/api/reports/insights.ts b/pages/api/reports/insights.ts new file mode 100644 index 00000000..dba11953 --- /dev/null +++ b/pages/api/reports/insights.ts @@ -0,0 +1,51 @@ +import { canViewWebsite } from 'lib/auth'; +import { useCors, useAuth } from 'lib/middleware'; +import { NextApiRequestQueryBody } from 'lib/types'; +import { NextApiResponse } from 'next'; +import { ok, methodNotAllowed, unauthorized } from 'next-basics'; +import { getInsights } from 'queries'; + +export interface InsightsRequestBody { + websiteId: string; + dateRange: { + startDate: string; + endDate: string; + }; + fields: string[]; + filters: string[]; + groups: string[]; +} + +export default async ( + req: NextApiRequestQueryBody, + res: NextApiResponse, +) => { + await useCors(req, res); + await useAuth(req, res); + + if (req.method === 'POST') { + const { + websiteId, + dateRange: { startDate, endDate }, + fields, + filters, + groups, + } = req.body; + + if (!(await canViewWebsite(req.auth, websiteId))) { + return unauthorized(res); + } + + const data = await getInsights(websiteId, { + startDate: new Date(startDate), + endDate: new Date(endDate), + fields, + filters, + groups, + }); + + return ok(res, data); + } + + return methodNotAllowed(res); +}; diff --git a/pages/api/send.ts b/pages/api/send.ts index ec5f55b3..8c88c509 100644 --- a/pages/api/send.ts +++ b/pages/api/send.ts @@ -1,7 +1,7 @@ import isbot from 'isbot'; import ipaddr from 'ipaddr.js'; import { createToken, ok, send, badRequest, forbidden } from 'next-basics'; -import { saveEvent } from 'queries'; +import { saveEvent, saveSessionData } from 'queries'; import { useCors, useSession } from 'lib/middleware'; import { getJsonBody, getIpAddress } from 'lib/detect'; import { secret } from 'lib/crypto'; @@ -9,7 +9,6 @@ import { NextApiRequest, NextApiResponse } from 'next'; import { Resolver } from 'dns/promises'; import { CollectionType } from 'lib/types'; import { COLLECTION_TYPE } from 'lib/constants'; -import { saveSessionData } from 'queries/analytics/session/saveSessionData'; export interface CollectRequestBody { payload: { @@ -116,7 +115,7 @@ export default async (req: NextApiRequestCollect, res: NextApiResponse) => { }; function validateBody(res: NextApiResponse, { type, payload }: CollectRequestBody) { - const { data } = payload; + const { data } = payload || {}; // Validate type if (type !== COLLECTION_TYPE.event && type !== COLLECTION_TYPE.identify) { diff --git a/pages/api/users/[id]/teams.ts b/pages/api/users/[id]/teams.ts new file mode 100644 index 00000000..c31b98ca --- /dev/null +++ b/pages/api/users/[id]/teams.ts @@ -0,0 +1,34 @@ +import { useAuth, useCors } from 'lib/middleware'; +import { NextApiRequestQueryBody } from 'lib/types'; +import { NextApiResponse } from 'next'; +import { methodNotAllowed, ok, unauthorized } from 'next-basics'; +import { getUserTeams } from 'queries'; + +export interface UserWebsitesRequestBody { + name: string; + domain: string; + shareId: string; +} + +export default async ( + req: NextApiRequestQueryBody, + res: NextApiResponse, +) => { + await useCors(req, res); + await useAuth(req, res); + + const { user } = req.auth; + const { id: userId } = req.query; + + if (req.method === 'GET') { + if (!user.isAdmin && user.id !== userId) { + return unauthorized(res); + } + + const teams = await getUserTeams(userId); + + return ok(res, teams); + } + + return methodNotAllowed(res); +}; diff --git a/pages/api/users/[id]/websites.ts b/pages/api/users/[id]/websites.ts index de4a3a3a..e94094a4 100644 --- a/pages/api/users/[id]/websites.ts +++ b/pages/api/users/[id]/websites.ts @@ -16,7 +16,6 @@ export default async ( ) => { await useCors(req, res); await useAuth(req, res); - const { user } = req.auth; const { id: userId } = req.query; @@ -25,7 +24,9 @@ export default async ( return unauthorized(res); } - const websites = await getUserWebsites(userId); + const { includeTeams } = req.query; + + const websites = await getUserWebsites(userId, { includeTeams }); return ok(res, websites); } diff --git a/pages/api/websites/[id]/daterange.ts b/pages/api/websites/[id]/daterange.ts new file mode 100644 index 00000000..dc043560 --- /dev/null +++ b/pages/api/websites/[id]/daterange.ts @@ -0,0 +1,32 @@ +import { WebsiteActive, NextApiRequestQueryBody } from 'lib/types'; +import { canViewWebsite } from 'lib/auth'; +import { useAuth, useCors } from 'lib/middleware'; +import { NextApiResponse } from 'next'; +import { methodNotAllowed, ok, unauthorized } from 'next-basics'; +import { getWebsiteDateRange } from 'queries'; + +export interface WebsiteDateRangeRequestQuery { + id: string; +} + +export default async ( + req: NextApiRequestQueryBody, + res: NextApiResponse, +) => { + await useCors(req, res); + await useAuth(req, res); + + const { id: websiteId } = req.query; + + if (req.method === 'GET') { + if (!(await canViewWebsite(req.auth, websiteId))) { + return unauthorized(res); + } + + const result = await getWebsiteDateRange(websiteId); + + return ok(res, result); + } + + return methodNotAllowed(res); +}; diff --git a/pages/api/websites/[id]/events.ts b/pages/api/websites/[id]/events.ts index 12473da0..b9e3ac71 100644 --- a/pages/api/websites/[id]/events.ts +++ b/pages/api/websites/[id]/events.ts @@ -5,6 +5,7 @@ import moment from 'moment-timezone'; import { NextApiResponse } from 'next'; import { badRequest, methodNotAllowed, ok, unauthorized } from 'next-basics'; import { getEventMetrics } from 'queries'; +import { parseDateRangeQuery } from 'lib/query'; const unitTypes = ['year', 'month', 'hour', 'day']; @@ -25,7 +26,8 @@ export default async ( await useCors(req, res); await useAuth(req, res); - const { id: websiteId, startAt, endAt, unit, timezone, url, eventName } = req.query; + const { id: websiteId, timezone, url, eventName } = req.query; + const { startDate, endDate, unit } = await parseDateRangeQuery(req); if (req.method === 'GET') { if (!(await canViewWebsite(req.auth, websiteId))) { @@ -35,8 +37,6 @@ export default async ( if (!moment.tz.zone(timezone) || !unitTypes.includes(unit)) { return badRequest(res); } - const startDate = new Date(+startAt); - const endDate = new Date(+endAt); const events = await getEventMetrics(websiteId, { startDate, diff --git a/pages/api/websites/[id]/metrics.ts b/pages/api/websites/[id]/metrics.ts index 5cf818a0..4c6fb270 100644 --- a/pages/api/websites/[id]/metrics.ts +++ b/pages/api/websites/[id]/metrics.ts @@ -5,6 +5,7 @@ import { canViewWebsite } from 'lib/auth'; import { useAuth, useCors } from 'lib/middleware'; import { SESSION_COLUMNS, EVENT_COLUMNS, FILTER_COLUMNS } from 'lib/constants'; import { getPageviewMetrics, getSessionMetrics } from 'queries'; +import { parseDateRangeQuery } from 'lib/query'; export interface WebsiteMetricsRequestQuery { id: string; @@ -34,8 +35,6 @@ export default async ( const { id: websiteId, type, - startAt, - endAt, url, referrer, title, @@ -54,8 +53,7 @@ export default async ( return unauthorized(res); } - const startDate = new Date(+startAt); - const endDate = new Date(+endAt); + const { startDate, endDate } = await parseDateRangeQuery(req); if (SESSION_COLUMNS.includes(type)) { const column = FILTER_COLUMNS[type] || type; diff --git a/pages/api/websites/[id]/pageviews.ts b/pages/api/websites/[id]/pageviews.ts index 9dfd2264..453c6733 100644 --- a/pages/api/websites/[id]/pageviews.ts +++ b/pages/api/websites/[id]/pageviews.ts @@ -5,8 +5,7 @@ import { NextApiRequestQueryBody, WebsitePageviews } from 'lib/types'; import { canViewWebsite } from 'lib/auth'; import { useAuth, useCors } from 'lib/middleware'; import { getPageviewStats } from 'queries'; - -const unitTypes = ['year', 'month', 'hour', 'day']; +import { parseDateRangeQuery } from 'lib/query'; export interface WebsitePageviewRequestQuery { id: string; @@ -34,9 +33,6 @@ export default async ( const { id: websiteId, - startAt, - endAt, - unit, timezone, url, referrer, @@ -54,10 +50,9 @@ export default async ( return unauthorized(res); } - const startDate = new Date(+startAt); - const endDate = new Date(+endAt); + const { startDate, endDate, unit } = await parseDateRangeQuery(req); - if (!moment.tz.zone(timezone) || !unitTypes.includes(unit)) { + if (!moment.tz.zone(timezone)) { return badRequest(res); } diff --git a/pages/api/websites/[id]/stats.ts b/pages/api/websites/[id]/stats.ts index 1e2f2292..3164913d 100644 --- a/pages/api/websites/[id]/stats.ts +++ b/pages/api/websites/[id]/stats.ts @@ -1,8 +1,10 @@ +import { subMinutes, differenceInMinutes } from 'date-fns'; +import { NextApiResponse } from 'next'; +import { methodNotAllowed, ok, unauthorized } from 'next-basics'; import { canViewWebsite } from 'lib/auth'; import { useAuth, useCors } from 'lib/middleware'; import { NextApiRequestQueryBody, WebsiteStats } from 'lib/types'; -import { NextApiResponse } from 'next'; -import { methodNotAllowed, ok, unauthorized } from 'next-basics'; +import { parseDateRangeQuery } from 'lib/query'; import { getWebsiteStats } from 'queries'; export interface WebsiteStatsRequestQuery { @@ -31,8 +33,6 @@ export default async ( const { id: websiteId, - startAt, - endAt, url, referrer, title, @@ -51,12 +51,10 @@ export default async ( return unauthorized(res); } - const startDate = new Date(+startAt); - const endDate = new Date(+endAt); - - const distance = endAt - startAt; - const prevStartDate = new Date(+startAt - distance); - const prevEndDate = new Date(+endAt - distance); + const { startDate, endDate } = await parseDateRangeQuery(req); + const diff = differenceInMinutes(endDate, startDate); + const prevStartDate = subMinutes(startDate, diff); + const prevEndDate = subMinutes(endDate, diff); const metrics = await getWebsiteStats(websiteId, { startDate, @@ -75,6 +73,7 @@ export default async ( city, }, }); + const prevPeriod = await getWebsiteStats(websiteId, { startDate: prevStartDate, endDate: prevEndDate, diff --git a/pages/api/websites/index.ts b/pages/api/websites/index.ts index 49797d08..c8b5aba2 100644 --- a/pages/api/websites/index.ts +++ b/pages/api/websites/index.ts @@ -4,7 +4,8 @@ import { useAuth, useCors } from 'lib/middleware'; import { NextApiRequestQueryBody } from 'lib/types'; import { NextApiResponse } from 'next'; import { methodNotAllowed, ok, unauthorized } from 'next-basics'; -import { createWebsite, getUserWebsites } from 'queries'; +import { createWebsite } from 'queries'; +import userWebsites from 'pages/api/users/[id]/websites'; export interface WebsitesRequestBody { name: string; @@ -24,9 +25,9 @@ export default async ( } = req.auth; if (req.method === 'GET') { - const websites = await getUserWebsites(userId); + req.query.id = userId; - return ok(res, websites); + return userWebsites(req, res); } if (req.method === 'POST') { diff --git a/pages/reports/event-data.js b/pages/reports/insights.js similarity index 50% rename from pages/reports/event-data.js rename to pages/reports/insights.js index 4566b320..45236e10 100644 --- a/pages/reports/event-data.js +++ b/pages/reports/insights.js @@ -1,13 +1,13 @@ import AppLayout from 'components/layout/AppLayout'; -import EventDataReport from 'components/pages/reports/event-data/EventDataReport'; +import InsightsReport from 'components/pages/reports/insights/InsightsReport'; import { useMessages } from 'hooks'; export default function () { const { formatMessage, labels } = useMessages(); return ( - - + + ); } diff --git a/public/intl/messages/am-ET.json b/public/intl/messages/am-ET.json index f367c254..69706b8b 100644 --- a/public/intl/messages/am-ET.json +++ b/public/intl/messages/am-ET.json @@ -17,6 +17,18 @@ "value": "Activity log" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -245,6 +257,12 @@ "value": "Enable share URL" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +275,18 @@ "value": "Events" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -523,6 +553,12 @@ "value": "Role" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -679,6 +715,12 @@ "value": "Unknown" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -715,6 +757,12 @@ "value": "View details" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -745,12 +793,180 @@ "value": "Websites" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Yesterday" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -919,6 +1135,12 @@ "value": "No data available." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, diff --git a/public/intl/messages/ar-SA.json b/public/intl/messages/ar-SA.json index 33673f06..f7c5a9ea 100644 --- a/public/intl/messages/ar-SA.json +++ b/public/intl/messages/ar-SA.json @@ -17,6 +17,18 @@ "value": "سجل الأحداث" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -245,6 +257,12 @@ "value": "تفعيل مشاركة الرابط" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +275,18 @@ "value": "الأحداث" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -523,6 +553,12 @@ "value": "الصلاحية" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -679,6 +715,12 @@ "value": "غير معروف" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -715,6 +757,12 @@ "value": "عرض التفاصيل" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -745,12 +793,180 @@ "value": "المواقع" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "الأمس" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -919,6 +1135,12 @@ "value": "لا توجد بيانات متاحة." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, diff --git a/public/intl/messages/be-BY.json b/public/intl/messages/be-BY.json index 5e1d6a13..0c2a6ee2 100644 --- a/public/intl/messages/be-BY.json +++ b/public/intl/messages/be-BY.json @@ -17,6 +17,18 @@ "value": "Activity log" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -245,6 +257,12 @@ "value": "Дазволіць дзяліцца спасылкай" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +275,18 @@ "value": "Падзеі" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -523,6 +553,12 @@ "value": "Role" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -679,6 +715,12 @@ "value": "Невядома" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -715,6 +757,12 @@ "value": "Пабачыць дэталі" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -745,12 +793,180 @@ "value": "Сайты" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Учора" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -919,6 +1135,12 @@ "value": "Няма дадзеных." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, diff --git a/public/intl/messages/bn-BD.json b/public/intl/messages/bn-BD.json index f068cd19..568b3bba 100644 --- a/public/intl/messages/bn-BD.json +++ b/public/intl/messages/bn-BD.json @@ -17,6 +17,18 @@ "value": "Activity log" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -245,6 +257,12 @@ "value": "শেয়ার ইউআরএল শেয়ার করুন" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +275,18 @@ "value": "ঘটনা" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -523,6 +553,12 @@ "value": "Role" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -679,6 +715,12 @@ "value": "অজানা" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -715,6 +757,12 @@ "value": "বিস্তারিত দেখুন" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -745,12 +793,180 @@ "value": "সবগুলো ওয়েবসাইট" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Yesterday" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -919,6 +1135,12 @@ "value": "কোন তথ্য নেই।" } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, diff --git a/public/intl/messages/ca-ES.json b/public/intl/messages/ca-ES.json index e9835ab5..a9947f91 100644 --- a/public/intl/messages/ca-ES.json +++ b/public/intl/messages/ca-ES.json @@ -17,6 +17,18 @@ "value": "Activity log" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -245,6 +257,12 @@ "value": "Activa l'enllaç per compartir" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +275,18 @@ "value": "Esdeveniments" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -523,6 +553,12 @@ "value": "Role" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -679,6 +715,12 @@ "value": "Desconegut" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -715,6 +757,12 @@ "value": "Veure els detalls" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -745,12 +793,180 @@ "value": "Llocs web" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Ahir" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -919,6 +1135,12 @@ "value": "No hi ha dades disponibles." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, diff --git a/public/intl/messages/cs-CZ.json b/public/intl/messages/cs-CZ.json index 573ee2d8..63af5489 100644 --- a/public/intl/messages/cs-CZ.json +++ b/public/intl/messages/cs-CZ.json @@ -17,6 +17,18 @@ "value": "Activity log" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -245,6 +257,12 @@ "value": "Povolit sdílení URL" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +275,18 @@ "value": "Události" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -523,6 +553,12 @@ "value": "Role" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -679,6 +715,12 @@ "value": "Neznámý" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -715,6 +757,12 @@ "value": "Zobrazit detaily" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -745,12 +793,180 @@ "value": "Weby" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Yesterday" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -919,6 +1135,12 @@ "value": "Žádná data." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, diff --git a/public/intl/messages/da-DK.json b/public/intl/messages/da-DK.json index 5a18cd72..b8e4cba2 100644 --- a/public/intl/messages/da-DK.json +++ b/public/intl/messages/da-DK.json @@ -17,6 +17,18 @@ "value": "Activity log" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -245,6 +257,12 @@ "value": "Aktivér delings-URL" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +275,18 @@ "value": "Hændelser" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -523,6 +553,12 @@ "value": "Role" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -679,6 +715,12 @@ "value": "Ukendt" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -715,6 +757,12 @@ "value": "Vis detajler" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -745,12 +793,180 @@ "value": "Hjemmesider" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Yesterday" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -919,6 +1135,12 @@ "value": "Ingen data tilgængelig." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, diff --git a/public/intl/messages/de-CH.json b/public/intl/messages/de-CH.json index d35cabeb..7b485089 100644 --- a/public/intl/messages/de-CH.json +++ b/public/intl/messages/de-CH.json @@ -17,6 +17,18 @@ "value": "Aktivitätsverlauf" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -245,6 +257,12 @@ "value": "Freigab-URL aktiviere" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +275,18 @@ "value": "Ereigniss" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -523,6 +553,12 @@ "value": "Rollä" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -679,6 +715,12 @@ "value": "Unbekannt" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -715,6 +757,12 @@ "value": "Details azeige" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -745,12 +793,180 @@ "value": "Websiite" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Gester" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -919,6 +1135,12 @@ "value": "Kei Date vorhande." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, diff --git a/public/intl/messages/de-DE.json b/public/intl/messages/de-DE.json index 2cb5a482..9a5a3196 100644 --- a/public/intl/messages/de-DE.json +++ b/public/intl/messages/de-DE.json @@ -17,6 +17,18 @@ "value": "Aktivitätsverlauf" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -245,6 +257,12 @@ "value": "Freigabe-URL aktivieren" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +275,18 @@ "value": "Ereignisse" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -523,6 +553,12 @@ "value": "Rolle" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -679,6 +715,12 @@ "value": "Unbekannt" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -715,6 +757,12 @@ "value": "Details anzeigen" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -745,12 +793,180 @@ "value": "Webseiten" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Gestern" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -919,6 +1135,12 @@ "value": "Keine Daten vorhanden." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, diff --git a/public/intl/messages/el-GR.json b/public/intl/messages/el-GR.json index 0818eac3..f29b1051 100644 --- a/public/intl/messages/el-GR.json +++ b/public/intl/messages/el-GR.json @@ -17,6 +17,18 @@ "value": "Activity log" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -245,6 +257,12 @@ "value": "Ενεργοποίηση κοινής χρήσης URL" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +275,18 @@ "value": "Γεγονότα" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -523,6 +553,12 @@ "value": "Role" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -679,6 +715,12 @@ "value": "Άγνωστο" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -715,6 +757,12 @@ "value": "Λεπτομέρειες" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -745,12 +793,180 @@ "value": "Ιστότοποι" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Yesterday" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -919,6 +1135,12 @@ "value": "Δεν υπάρχουν διαθέσιμα δεδομένα." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, diff --git a/public/intl/messages/en-GB.json b/public/intl/messages/en-GB.json index 970c0546..ac6d9230 100644 --- a/public/intl/messages/en-GB.json +++ b/public/intl/messages/en-GB.json @@ -17,6 +17,18 @@ "value": "Activity log" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -245,6 +257,12 @@ "value": "Enable share URL" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +275,18 @@ "value": "Events" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -523,6 +553,12 @@ "value": "Role" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -679,6 +715,12 @@ "value": "Unknown" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -715,6 +757,12 @@ "value": "View details" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -745,12 +793,180 @@ "value": "Websites" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Yesterday" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -919,6 +1135,12 @@ "value": "No data available." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, diff --git a/public/intl/messages/en-US.json b/public/intl/messages/en-US.json index 11b34295..a137d545 100644 --- a/public/intl/messages/en-US.json +++ b/public/intl/messages/en-US.json @@ -17,6 +17,18 @@ "value": "Activity log" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -245,6 +257,12 @@ "value": "Enable share URL" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +275,18 @@ "value": "Events" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -523,6 +553,12 @@ "value": "Role" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -679,6 +715,12 @@ "value": "Unknown" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -715,6 +757,12 @@ "value": "View details" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -745,12 +793,180 @@ "value": "Websites" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Yesterday" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -919,6 +1135,12 @@ "value": "No data available." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, diff --git a/public/intl/messages/es-ES.json b/public/intl/messages/es-ES.json new file mode 100644 index 00000000..fbe554ec --- /dev/null +++ b/public/intl/messages/es-ES.json @@ -0,0 +1,1290 @@ +{ + "label.access-code": [ + { + "type": 0, + "value": "Código de acceso" + } + ], + "label.actions": [ + { + "type": 0, + "value": "Acciones" + } + ], + "label.activity-log": [ + { + "type": 0, + "value": "Registro de actividad" + } + ], + "label.add": [ + { + "type": 0, + "value": "Añadir" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Añadir descripción" + } + ], + "label.add-website": [ + { + "type": 0, + "value": "Nuevo sitio web" + } + ], + "label.admin": [ + { + "type": 0, + "value": "Administrador" + } + ], + "label.all": [ + { + "type": 0, + "value": "Todos" + } + ], + "label.all-time": [ + { + "type": 0, + "value": "Todos los tiempos" + } + ], + "label.analytics": [ + { + "type": 0, + "value": "Analíticas" + } + ], + "label.average-visit-time": [ + { + "type": 0, + "value": "Tiempo promedio de visita" + } + ], + "label.back": [ + { + "type": 0, + "value": "Atrás" + } + ], + "label.bounce-rate": [ + { + "type": 0, + "value": "Porcentaje de rebote" + } + ], + "label.browsers": [ + { + "type": 0, + "value": "Navegadores" + } + ], + "label.cancel": [ + { + "type": 0, + "value": "Cancelar" + } + ], + "label.change-password": [ + { + "type": 0, + "value": "Cambiar contraseña" + } + ], + "label.cities": [ + { + "type": 0, + "value": "Ciudades" + } + ], + "label.clear-all": [ + { + "type": 0, + "value": "Limpiar todo" + } + ], + "label.confirm": [ + { + "type": 0, + "value": "Confirmar" + } + ], + "label.confirm-password": [ + { + "type": 0, + "value": "Confirmar contraseña" + } + ], + "label.continue": [ + { + "type": 0, + "value": "Continuar" + } + ], + "label.countries": [ + { + "type": 0, + "value": "Países" + } + ], + "label.create-team": [ + { + "type": 0, + "value": "Crear equipo" + } + ], + "label.create-user": [ + { + "type": 0, + "value": "Crear usuario" + } + ], + "label.created": [ + { + "type": 0, + "value": "Creado" + } + ], + "label.current-password": [ + { + "type": 0, + "value": "Contraseña actual" + } + ], + "label.custom-range": [ + { + "type": 0, + "value": "Intervalo personalizado" + } + ], + "label.dashboard": [ + { + "type": 0, + "value": "Panel de control" + } + ], + "label.data": [ + { + "type": 0, + "value": "Datos" + } + ], + "label.date-range": [ + { + "type": 0, + "value": "Intervalo de fechas" + } + ], + "label.default-date-range": [ + { + "type": 0, + "value": "Intervalo por defecto" + } + ], + "label.delete": [ + { + "type": 0, + "value": "Eliminar" + } + ], + "label.delete-team": [ + { + "type": 0, + "value": "Eliminar equipo" + } + ], + "label.delete-user": [ + { + "type": 0, + "value": "Eliminar usuario" + } + ], + "label.delete-website": [ + { + "type": 0, + "value": "Eliminar sitio" + } + ], + "label.desktop": [ + { + "type": 0, + "value": "Escritorio" + } + ], + "label.details": [ + { + "type": 0, + "value": "Detalles" + } + ], + "label.devices": [ + { + "type": 0, + "value": "Dispositivos" + } + ], + "label.dismiss": [ + { + "type": 0, + "value": "Ignorar" + } + ], + "label.domain": [ + { + "type": 0, + "value": "Dominio" + } + ], + "label.edit": [ + { + "type": 0, + "value": "Editar" + } + ], + "label.edit-dashboard": [ + { + "type": 0, + "value": "Editar panel" + } + ], + "label.enable-share-url": [ + { + "type": 0, + "value": "Habilitar compartir URL" + } + ], + "label.event": [ + { + "type": 0, + "value": "Evento" + } + ], + "label.event-data": [ + { + "type": 0, + "value": "Datos de evento" + } + ], + "label.events": [ + { + "type": 0, + "value": "Eventos" + } + ], + "label.field": [ + { + "type": 0, + "value": "Campo" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Campos" + } + ], + "label.filter-combined": [ + { + "type": 0, + "value": "Combinado" + } + ], + "label.filter-raw": [ + { + "type": 0, + "value": "En crudo" + } + ], + "label.funnel": [ + { + "type": 0, + "value": "Funnel" + } + ], + "label.join": [ + { + "type": 0, + "value": "Unir" + } + ], + "label.join-team": [ + { + "type": 0, + "value": "Unirse al equipo" + } + ], + "label.language": [ + { + "type": 0, + "value": "Idioma" + } + ], + "label.languages": [ + { + "type": 0, + "value": "Idiomas" + } + ], + "label.laptop": [ + { + "type": 0, + "value": "Portátil" + } + ], + "label.last-days": [ + { + "type": 0, + "value": "Últimos " + }, + { + "type": 1, + "value": "x" + }, + { + "type": 0, + "value": " días" + } + ], + "label.last-hours": [ + { + "type": 0, + "value": "Últimas " + }, + { + "type": 1, + "value": "x" + }, + { + "type": 0, + "value": " horas" + } + ], + "label.leave": [ + { + "type": 0, + "value": "Abandonar" + } + ], + "label.leave-team": [ + { + "type": 0, + "value": "Abandonar equipo" + } + ], + "label.login": [ + { + "type": 0, + "value": "Iniciar sesión" + } + ], + "label.logout": [ + { + "type": 0, + "value": "Cerrar sesión" + } + ], + "label.members": [ + { + "type": 0, + "value": "Miembros" + } + ], + "label.mobile": [ + { + "type": 0, + "value": "Móvil" + } + ], + "label.more": [ + { + "type": 0, + "value": "Más" + } + ], + "label.name": [ + { + "type": 0, + "value": "Nombre" + } + ], + "label.new-password": [ + { + "type": 0, + "value": "Nueva contraseña" + } + ], + "label.none": [ + { + "type": 0, + "value": "Ninguno" + } + ], + "label.operating-systems": [ + { + "type": 0, + "value": "Sistemas operativos" + } + ], + "label.owner": [ + { + "type": 0, + "value": "Propietario" + } + ], + "label.page-views": [ + { + "type": 0, + "value": "Vistas" + } + ], + "label.pages": [ + { + "type": 0, + "value": "Páginas" + } + ], + "label.password": [ + { + "type": 0, + "value": "Contraseña" + } + ], + "label.powered-by": [ + { + "type": 0, + "value": "Con la ayuda de " + }, + { + "type": 1, + "value": "name" + } + ], + "label.profile": [ + { + "type": 0, + "value": "Perfil" + } + ], + "label.queries": [ + { + "type": 0, + "value": "Consultas" + } + ], + "label.query": [ + { + "type": 0, + "value": "Query" + } + ], + "label.query-parameters": [ + { + "type": 0, + "value": "Parámetros de petición" + } + ], + "label.realtime": [ + { + "type": 0, + "value": "Tiempo real" + } + ], + "label.referrers": [ + { + "type": 0, + "value": "Referido desde" + } + ], + "label.refresh": [ + { + "type": 0, + "value": "Actualizar" + } + ], + "label.regenerate": [ + { + "type": 0, + "value": "Regenerar" + } + ], + "label.regions": [ + { + "type": 0, + "value": "Regiones" + } + ], + "label.remove": [ + { + "type": 0, + "value": "Quitar" + } + ], + "label.reports": [ + { + "type": 0, + "value": "Reportes" + } + ], + "label.required": [ + { + "type": 0, + "value": "Obligatorio" + } + ], + "label.reset": [ + { + "type": 0, + "value": "Reiniciar" + } + ], + "label.reset-website": [ + { + "type": 0, + "value": "Reiniciar estadísticas" + } + ], + "label.role": [ + { + "type": 0, + "value": "Rol" + } + ], + "label.run-query": [ + { + "type": 0, + "value": "Ejecutar consulta" + } + ], + "label.save": [ + { + "type": 0, + "value": "Guardar" + } + ], + "label.screens": [ + { + "type": 0, + "value": "Pantallas" + } + ], + "label.select-date": [ + { + "type": 0, + "value": "Seleccionar fecha" + } + ], + "label.select-website": [ + { + "type": 0, + "value": "Seleccionar sitio web" + } + ], + "label.sessions": [ + { + "type": 0, + "value": "Sesiones" + } + ], + "label.settings": [ + { + "type": 0, + "value": "Configuraciones" + } + ], + "label.share-url": [ + { + "type": 0, + "value": "Compartir URL" + } + ], + "label.single-day": [ + { + "type": 0, + "value": "Un solo día" + } + ], + "label.tablet": [ + { + "type": 0, + "value": "Tableta" + } + ], + "label.team": [ + { + "type": 0, + "value": "Equipo" + } + ], + "label.team-guest": [ + { + "type": 0, + "value": "Invitado al equipo" + } + ], + "label.team-id": [ + { + "type": 0, + "value": "ID de equipo" + } + ], + "label.team-member": [ + { + "type": 0, + "value": "Miembro del equipo" + } + ], + "label.team-owner": [ + { + "type": 0, + "value": "Admin. del equipo" + } + ], + "label.teams": [ + { + "type": 0, + "value": "Equipos" + } + ], + "label.theme": [ + { + "type": 0, + "value": "Tema" + } + ], + "label.this-month": [ + { + "type": 0, + "value": "Este mes" + } + ], + "label.this-week": [ + { + "type": 0, + "value": "Esta semana" + } + ], + "label.this-year": [ + { + "type": 0, + "value": "Este año" + } + ], + "label.timezone": [ + { + "type": 0, + "value": "Zona horaria" + } + ], + "label.title": [ + { + "type": 0, + "value": "Título" + } + ], + "label.today": [ + { + "type": 0, + "value": "Hoy" + } + ], + "label.toggle-charts": [ + { + "type": 0, + "value": "Alternar gráficas" + } + ], + "label.tracking-code": [ + { + "type": 0, + "value": "Código de rastreo" + } + ], + "label.unique-visitors": [ + { + "type": 0, + "value": "Visitantes únicos" + } + ], + "label.unknown": [ + { + "type": 0, + "value": "Desconocida" + } + ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], + "label.urls": [ + { + "type": 0, + "value": "URLs" + } + ], + "label.user": [ + { + "type": 0, + "value": "Usuario" + } + ], + "label.username": [ + { + "type": 0, + "value": "Nombre de usuario" + } + ], + "label.users": [ + { + "type": 0, + "value": "Usuarios" + } + ], + "label.view": [ + { + "type": 0, + "value": "Visualizar" + } + ], + "label.view-details": [ + { + "type": 0, + "value": "Ver detalles" + } + ], + "label.view-only": [ + { + "type": 0, + "value": "Ver sólo" + } + ], + "label.views": [ + { + "type": 0, + "value": "Vistas" + } + ], + "label.visitors": [ + { + "type": 0, + "value": "Visitantes" + } + ], + "label.website": [ + { + "type": 0, + "value": "Sitio web" + } + ], + "label.website-id": [ + { + "type": 0, + "value": "ID del sitio web" + } + ], + "label.websites": [ + { + "type": 0, + "value": "Sitios web" + } + ], + "label.window": [ + { + "type": 0, + "value": "Ventana" + } + ], + "label.yesterday": [ + { + "type": 0, + "value": "Ayer" + } + ], + "labels.after": [ + { + "type": 0, + "value": "Después" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Media" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Antes" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Desglose" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contiene" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Crear reporte" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Descripciones" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "No contiene" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "No es igual a" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Es igual a" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filtros" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Mayor que" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Mayor que o igual a" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Menor que" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Menor que o igual a" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Máx" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Mín" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Resumen" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Suma" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total de registros" + } + ], + "labels.true": [ + { + "type": 0, + "value": "Verdadero" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Tipo" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Único" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Sin título" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Valor" + } + ], + "message.active-users": [ + { + "type": 1, + "value": "x" + }, + { + "type": 0, + "value": " " + }, + { + "offset": 0, + "options": { + "one": { + "value": [ + { + "type": 0, + "value": "activo" + } + ] + }, + "other": { + "value": [ + { + "type": 0, + "value": "activos" + } + ] + } + }, + "pluralType": "cardinal", + "type": 6, + "value": "x" + } + ], + "message.confirm-delete": [ + { + "type": 0, + "value": "¿Seguro que quieres eliminar " + }, + { + "type": 1, + "value": "target" + }, + { + "type": 0, + "value": "?" + } + ], + "message.confirm-leave": [ + { + "type": 0, + "value": "¿Seguro que quieres abandonar " + }, + { + "type": 1, + "value": "target" + }, + { + "type": 0, + "value": "?" + } + ], + "message.confirm-reset": [ + { + "type": 0, + "value": "¿Seguro que quieres BORRAR las analíticas de " + }, + { + "type": 1, + "value": "target" + }, + { + "type": 0, + "value": "?" + } + ], + "message.delete-account": [ + { + "type": 0, + "value": "Para borrar esta cuenta, escribe " + }, + { + "type": 1, + "value": "confirmation" + }, + { + "type": 0, + "value": " a continuación para confirmar." + } + ], + "message.delete-website": [ + { + "type": 0, + "value": "Para borrar este sitio web, escribe " + }, + { + "type": 1, + "value": "confirmation" + }, + { + "type": 0, + "value": " a continuación para confirmar." + } + ], + "message.delete-website-warning": [ + { + "type": 0, + "value": "Toda la información relacionada será eliminada." + } + ], + "message.error": [ + { + "type": 0, + "value": "Algo falló." + } + ], + "message.event-log": [ + { + "type": 1, + "value": "event" + }, + { + "type": 0, + "value": " en " + }, + { + "type": 1, + "value": "url" + } + ], + "message.go-to-settings": [ + { + "type": 0, + "value": "Ir a la configuración" + } + ], + "message.incorrect-username-password": [ + { + "type": 0, + "value": "Nombre de usuario o contraseña incorrectos." + } + ], + "message.invalid-domain": [ + { + "type": 0, + "value": "Dominio inválido" + } + ], + "message.min-password-length": [ + { + "type": 0, + "value": "Longitud mínima de " + }, + { + "type": 1, + "value": "n" + }, + { + "type": 0, + "value": " caracteres" + } + ], + "message.no-data-available": [ + { + "type": 0, + "value": "No hay información disponible." + } + ], + "message.no-event-data": [ + { + "type": 0, + "value": "No hay datos de eventos disponibles." + } + ], + "message.no-match-password": [ + { + "type": 0, + "value": "Las contraseñas no coinciden" + } + ], + "message.no-teams": [ + { + "type": 0, + "value": "No has creado ningún equipo." + } + ], + "message.no-users": [ + { + "type": 0, + "value": "No hay usuarios." + } + ], + "message.page-not-found": [ + { + "type": 0, + "value": "Página no encontrada" + } + ], + "message.reset-website": [ + { + "type": 0, + "value": "Para reiniciar este sitio web, escribe " + }, + { + "type": 1, + "value": "confirmation" + }, + { + "type": 0, + "value": " a continuación para confirmar." + } + ], + "message.reset-website-warning": [ + { + "type": 0, + "value": "Todas las estadísticas de esta página serán eliminadas, pero el código de rastreo permanecerá intacto." + } + ], + "message.saved": [ + { + "type": 0, + "value": "Guardado." + } + ], + "message.share-url": [ + { + "type": 0, + "value": "Esta es la URL pública para " + }, + { + "type": 1, + "value": "target" + }, + { + "type": 0, + "value": "." + } + ], + "message.team-already-member": [ + { + "type": 0, + "value": "Ya eres miembro de este equipo." + } + ], + "message.team-not-found": [ + { + "type": 0, + "value": "Equipo no encontrado." + } + ], + "message.tracking-code": [ + { + "type": 0, + "value": "Código de rastreo" + } + ], + "message.user-deleted": [ + { + "type": 0, + "value": "Usuario eliminado." + } + ], + "message.visitor-log": [ + { + "type": 0, + "value": "Visitante desde " + }, + { + "type": 1, + "value": "country" + }, + { + "type": 0, + "value": " usando " + }, + { + "type": 1, + "value": "browser" + }, + { + "type": 0, + "value": " en " + }, + { + "type": 1, + "value": "os" + }, + { + "type": 0, + "value": " " + }, + { + "type": 1, + "value": "device" + } + ], + "messages.no-results-found": [ + { + "type": 0, + "value": "No se encontraron resultados." + } + ], + "messages.no-team-websites": [ + { + "type": 0, + "value": "Este equipo no tiene ningún sitio web configurado." + } + ], + "messages.no-websites-configured": [ + { + "type": 0, + "value": "No tienes ningún sitio web configurado." + } + ], + "messages.team-websites-info": [ + { + "type": 0, + "value": "Las analíticas de tus sitios web pueden ser vistas por cualquier miembro del equipo." + } + ] +} diff --git a/public/intl/messages/es-MX.json b/public/intl/messages/es-MX.json index 48d54fe9..d754cff4 100644 --- a/public/intl/messages/es-MX.json +++ b/public/intl/messages/es-MX.json @@ -17,6 +17,18 @@ "value": "Registro de actividad" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -245,6 +257,12 @@ "value": "Habilitar compartir URL" } ], + "label.event": [ + { + "type": 0, + "value": "Evento" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +275,18 @@ "value": "Eventos" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -523,6 +553,12 @@ "value": "Rol" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -679,6 +715,12 @@ "value": "Desconocida" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -715,6 +757,12 @@ "value": "Ver detalles" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -745,12 +793,180 @@ "value": "Sitios" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Ayer" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -919,6 +1135,12 @@ "value": "No hay información disponible." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, diff --git a/public/intl/messages/fa-IR.json b/public/intl/messages/fa-IR.json index f41a80a4..ca7669f5 100644 --- a/public/intl/messages/fa-IR.json +++ b/public/intl/messages/fa-IR.json @@ -17,6 +17,18 @@ "value": "Activity log" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -245,6 +257,12 @@ "value": "فعال کردن اشتراک گذاری URL" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +275,18 @@ "value": "رویدادها" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -523,6 +553,12 @@ "value": "Role" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -679,6 +715,12 @@ "value": "ناشناخته" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -715,6 +757,12 @@ "value": "مشاهده‌ی جزئیات" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -745,12 +793,180 @@ "value": "وب‌سایت‌ها" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Yesterday" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -919,6 +1135,12 @@ "value": "اطلاعاتی موجود نیست." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, diff --git a/public/intl/messages/fi-FI.json b/public/intl/messages/fi-FI.json index fa70253a..939d1be0 100644 --- a/public/intl/messages/fi-FI.json +++ b/public/intl/messages/fi-FI.json @@ -17,6 +17,18 @@ "value": "Activity log" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -245,6 +257,12 @@ "value": "Ota jakamisen URL-osoite käyttöön" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +275,18 @@ "value": "Tapahtumat" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -523,6 +553,12 @@ "value": "Role" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -679,6 +715,12 @@ "value": "Tuntematon" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -715,6 +757,12 @@ "value": "Katso tiedot" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -745,12 +793,180 @@ "value": "Verkkosivut" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Yesterday" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -919,6 +1135,12 @@ "value": "Tietoja ei ole käytettävissä." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, diff --git a/public/intl/messages/fo-FO.json b/public/intl/messages/fo-FO.json index 0b5b66f1..c403c2da 100644 --- a/public/intl/messages/fo-FO.json +++ b/public/intl/messages/fo-FO.json @@ -17,6 +17,18 @@ "value": "Activity log" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -245,6 +257,12 @@ "value": "Virkja deili leinki" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +275,18 @@ "value": "Hendingar/tiltøk" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -523,6 +553,12 @@ "value": "Role" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -679,6 +715,12 @@ "value": "Ókent" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -715,6 +757,12 @@ "value": "Vís frágreiðing" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -745,12 +793,180 @@ "value": "Heimasíður" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Yesterday" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -919,6 +1135,12 @@ "value": "Einki data tøk." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, diff --git a/public/intl/messages/fr-FR.json b/public/intl/messages/fr-FR.json index 0251929e..52fedba2 100644 --- a/public/intl/messages/fr-FR.json +++ b/public/intl/messages/fr-FR.json @@ -17,6 +17,18 @@ "value": "Journal d'activité" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -245,6 +257,12 @@ "value": "Activer l'URL de partage" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +275,18 @@ "value": "Événements" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -515,6 +545,12 @@ "value": "Rôle" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -671,6 +707,12 @@ "value": "Inconnu" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -707,6 +749,12 @@ "value": "Voir les détails" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -737,12 +785,180 @@ "value": "Sites" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Hier" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -915,6 +1131,12 @@ "value": "Aucune donnée disponible." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, diff --git a/public/intl/messages/ga-ES.json b/public/intl/messages/ga-ES.json index 2d4fb153..09ca313a 100644 --- a/public/intl/messages/ga-ES.json +++ b/public/intl/messages/ga-ES.json @@ -17,6 +17,18 @@ "value": "Activity log" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -245,6 +257,12 @@ "value": "Activar URL de compartición" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +275,18 @@ "value": "Eventos" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -531,6 +561,12 @@ "value": "Role" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -687,6 +723,12 @@ "value": "Descoñecido" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -723,6 +765,12 @@ "value": "Ver detalles" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -753,12 +801,180 @@ "value": "Sitios web" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Yesterday" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -927,6 +1143,12 @@ "value": "Sen datos dispoñibles." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, diff --git a/public/intl/messages/he-IL.json b/public/intl/messages/he-IL.json index ca5b8e2b..e44e9749 100644 --- a/public/intl/messages/he-IL.json +++ b/public/intl/messages/he-IL.json @@ -17,6 +17,18 @@ "value": "Activity log" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -245,6 +257,12 @@ "value": "הפעלת URL שיתוף" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +275,18 @@ "value": "אירועים" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -515,6 +545,12 @@ "value": "Role" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -671,6 +707,12 @@ "value": "לא ידוע" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -707,6 +749,12 @@ "value": "פרטים נוספים" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -737,12 +785,180 @@ "value": "אתרים" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Yesterday" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -911,6 +1127,12 @@ "value": "אין מידע זמין" } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, diff --git a/public/intl/messages/hi-IN.json b/public/intl/messages/hi-IN.json index 1eb32bf9..e56f51a0 100644 --- a/public/intl/messages/hi-IN.json +++ b/public/intl/messages/hi-IN.json @@ -17,6 +17,18 @@ "value": "Activity log" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -245,6 +257,12 @@ "value": "शेयर URL सक्षम करें" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +275,18 @@ "value": "स्पर्धाएँ" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -523,6 +553,12 @@ "value": "Role" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -679,6 +715,12 @@ "value": "अज्ञात" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -715,6 +757,12 @@ "value": "विवरण देखें" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -745,12 +793,180 @@ "value": "वेबसाइटों" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Yesterday" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -919,6 +1135,12 @@ "value": "कोई डेटा उपलब्ध नहीं है।" } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, diff --git a/public/intl/messages/hr-HR.json b/public/intl/messages/hr-HR.json index 9a085047..b0cf339c 100644 --- a/public/intl/messages/hr-HR.json +++ b/public/intl/messages/hr-HR.json @@ -17,6 +17,18 @@ "value": "Activity log" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -245,6 +257,12 @@ "value": "Omogući dijeljenje poveznice" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +275,18 @@ "value": "Events" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -523,6 +553,12 @@ "value": "Role" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -679,6 +715,12 @@ "value": "Nepoznato" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -715,6 +757,12 @@ "value": "Pogledaj detalje" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -745,12 +793,180 @@ "value": "Web stranice" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Jučer" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -919,6 +1135,12 @@ "value": "Nema dostupnih podataka." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, diff --git a/public/intl/messages/hu-HU.json b/public/intl/messages/hu-HU.json index 502e55e1..8f799db9 100644 --- a/public/intl/messages/hu-HU.json +++ b/public/intl/messages/hu-HU.json @@ -17,6 +17,18 @@ "value": "Activity log" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -245,6 +257,12 @@ "value": "URL-megosztás engedélyezése" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +275,18 @@ "value": "Események" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -523,6 +553,12 @@ "value": "Role" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -679,6 +715,12 @@ "value": "Ismeretlen" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -715,6 +757,12 @@ "value": "Részletek" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -745,12 +793,180 @@ "value": "Weboldalak" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Yesterday" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -923,6 +1139,12 @@ "value": "Nincs rendelkezésre álló adat." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, diff --git a/public/intl/messages/id-ID.json b/public/intl/messages/id-ID.json index b19e5f73..6de4be0b 100644 --- a/public/intl/messages/id-ID.json +++ b/public/intl/messages/id-ID.json @@ -17,6 +17,18 @@ "value": "Activity log" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -245,6 +257,12 @@ "value": "Aktifkan URL berbagi" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +275,18 @@ "value": "Perihal" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -515,6 +545,12 @@ "value": "Role" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -671,6 +707,12 @@ "value": "Tidak diketahui" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -707,6 +749,12 @@ "value": "Lihat Detil" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -737,12 +785,180 @@ "value": "Situs web" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Yesterday" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -887,6 +1103,12 @@ "value": "Tidak ada data." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, diff --git a/public/intl/messages/it-IT.json b/public/intl/messages/it-IT.json index b5f7c14d..1095c0d5 100644 --- a/public/intl/messages/it-IT.json +++ b/public/intl/messages/it-IT.json @@ -17,6 +17,18 @@ "value": "Activity log" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -245,6 +257,12 @@ "value": "Abilita URL di condivisione" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +275,18 @@ "value": "Eventi" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -523,6 +553,12 @@ "value": "Role" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -679,6 +715,12 @@ "value": "Sconosciuto" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -715,6 +757,12 @@ "value": "Vedi dettagli" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -745,12 +793,180 @@ "value": "Siti web" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Ieri" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -923,6 +1139,12 @@ "value": "Nessun dato disponibile." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, diff --git a/public/intl/messages/ja-JP.json b/public/intl/messages/ja-JP.json index febaa8de..a20da939 100644 --- a/public/intl/messages/ja-JP.json +++ b/public/intl/messages/ja-JP.json @@ -17,6 +17,18 @@ "value": "Activity log" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -245,6 +257,12 @@ "value": "共有リンクを有効にする" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +275,18 @@ "value": "イベント" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -527,6 +557,12 @@ "value": "Role" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -683,6 +719,12 @@ "value": "不明" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -719,6 +761,12 @@ "value": "詳細を見る" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -749,12 +797,180 @@ "value": "Webサイト" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Yesterday" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -895,6 +1111,12 @@ "value": "データがありません。" } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, diff --git a/public/intl/messages/km-KH.json b/public/intl/messages/km-KH.json index 7200d49d..4bfacf31 100644 --- a/public/intl/messages/km-KH.json +++ b/public/intl/messages/km-KH.json @@ -17,6 +17,18 @@ "value": "Activity log" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -245,6 +257,12 @@ "value": "បើកការចែករំលែក URL" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +275,18 @@ "value": "ព្រឹត្តិការណ៍" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -515,6 +545,12 @@ "value": "Role" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -671,6 +707,12 @@ "value": "មិនស្គាល់" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -707,6 +749,12 @@ "value": "មើលព័ត៌មានលម្អិត" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -737,12 +785,180 @@ "value": "គេហទំព័រ" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "ម្សិលមិញ" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 0, @@ -891,6 +1107,12 @@ "value": "មិនមានទិន្នន័យទេ។" } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, diff --git a/public/intl/messages/ko-KR.json b/public/intl/messages/ko-KR.json index c2c879d8..2a783f85 100644 --- a/public/intl/messages/ko-KR.json +++ b/public/intl/messages/ko-KR.json @@ -17,6 +17,18 @@ "value": "Activity log" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -245,6 +257,12 @@ "value": "URL 공유 활성화" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +275,18 @@ "value": "이벤트" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -527,6 +557,12 @@ "value": "Role" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -683,6 +719,12 @@ "value": "알 수 없음" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -719,6 +761,12 @@ "value": "상세보기" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -749,12 +797,180 @@ "value": "웹사이트" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Yesterday" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -895,6 +1111,12 @@ "value": "사용 가능한 데이터가 없습니다." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, diff --git a/public/intl/messages/lt-LT.json b/public/intl/messages/lt-LT.json index 21becd38..f741f294 100644 --- a/public/intl/messages/lt-LT.json +++ b/public/intl/messages/lt-LT.json @@ -17,6 +17,18 @@ "value": "Activity log" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -245,6 +257,12 @@ "value": "Įjungti bendrinimą su nuoroda" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +275,18 @@ "value": "Įvykiai" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -628,6 +658,12 @@ "value": "Role" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -784,6 +820,12 @@ "value": "Nežinoma" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -820,6 +862,12 @@ "value": "Peržiūrėti detaliau" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -850,12 +898,180 @@ "value": "Svetainės" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Yesterday" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "offset": 0, @@ -1044,6 +1260,12 @@ "value": "Nėra jokių duomenų." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, diff --git a/public/intl/messages/mn-MN.json b/public/intl/messages/mn-MN.json index 2638ee43..32c8d26f 100644 --- a/public/intl/messages/mn-MN.json +++ b/public/intl/messages/mn-MN.json @@ -17,6 +17,18 @@ "value": "Үйл ажиллагааны бүртгэл" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -245,6 +257,12 @@ "value": "Хуваалцах холбоос идэвхжүүлэх" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +275,18 @@ "value": "Үйлдэл" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -523,6 +553,12 @@ "value": "Эрх" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -679,6 +715,12 @@ "value": "Тодорхойгүй" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -715,6 +757,12 @@ "value": "Дэлгэрүүлж харах" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -745,12 +793,180 @@ "value": "Вебүүд" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Өчигдөр" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 0, @@ -927,6 +1143,12 @@ "value": "Өгөгдөл алга." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, diff --git a/public/intl/messages/ms-MY.json b/public/intl/messages/ms-MY.json index bf2aef02..da386635 100644 --- a/public/intl/messages/ms-MY.json +++ b/public/intl/messages/ms-MY.json @@ -17,6 +17,18 @@ "value": "Activity log" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -245,6 +257,12 @@ "value": "Aktifkan url berkongsi" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +275,18 @@ "value": "Peristiwa" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -515,6 +545,12 @@ "value": "Role" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -671,6 +707,12 @@ "value": "Tidak diketahui" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -707,6 +749,12 @@ "value": "Lihat butiran" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -737,12 +785,180 @@ "value": "Laman web" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Yesterday" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -911,6 +1127,12 @@ "value": "Tiada data yang boleh didapati." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, diff --git a/public/intl/messages/nb-NO.json b/public/intl/messages/nb-NO.json index ee95b9c5..a3cdc8c4 100644 --- a/public/intl/messages/nb-NO.json +++ b/public/intl/messages/nb-NO.json @@ -17,6 +17,18 @@ "value": "Activity log" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -245,6 +257,12 @@ "value": "Aktiver delings-URL" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +275,18 @@ "value": "Arrangementer" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -523,6 +553,12 @@ "value": "Role" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -679,6 +715,12 @@ "value": "Ukjent" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -715,6 +757,12 @@ "value": "Vis detaljer" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -745,12 +793,180 @@ "value": "Nettsteder" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Yesterday" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -923,6 +1139,12 @@ "value": "Ingen data tilgjengelig." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, diff --git a/public/intl/messages/nl-NL.json b/public/intl/messages/nl-NL.json index 149f095b..97719f38 100644 --- a/public/intl/messages/nl-NL.json +++ b/public/intl/messages/nl-NL.json @@ -17,6 +17,18 @@ "value": "Activiteiten logboek" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -245,6 +257,12 @@ "value": "Sta delen via openbare URL toe" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +275,18 @@ "value": "Gebeurtenissen" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -523,6 +553,12 @@ "value": "Gebruikersrol" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -679,6 +715,12 @@ "value": "Onbekend" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -715,6 +757,12 @@ "value": "Meer details" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -745,12 +793,180 @@ "value": "Websites" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Gisteren" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -919,6 +1135,12 @@ "value": "Geen gegevens beschikbaar." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, diff --git a/public/intl/messages/pl-PL.json b/public/intl/messages/pl-PL.json index ed2c711e..9ea33eb8 100644 --- a/public/intl/messages/pl-PL.json +++ b/public/intl/messages/pl-PL.json @@ -17,6 +17,18 @@ "value": "Dziennik aktywności" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -245,6 +257,12 @@ "value": "Włącz udostępnianie adresu URL" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +275,18 @@ "value": "Zdarzenia" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -523,6 +553,12 @@ "value": "Role" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -679,6 +715,12 @@ "value": "Nieznany" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -715,6 +757,12 @@ "value": "Pokaż szczegóły" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -745,12 +793,180 @@ "value": "Witryny" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Wczoraj" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -919,6 +1135,12 @@ "value": "Brak dostępnych danych." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, @@ -946,7 +1168,7 @@ "message.reset-website": [ { "type": 0, - "value": "To reset this website, type " + "value": "Aby zresetować tę witrynę, wpisz " }, { "type": 1, @@ -954,7 +1176,7 @@ }, { "type": 0, - "value": " in the box below to confirm." + "value": " w polu poniżej, aby potwierdzić." } ], "message.reset-website-warning": [ diff --git a/public/intl/messages/pt-BR.json b/public/intl/messages/pt-BR.json index d19c9ab2..6dec1b79 100644 --- a/public/intl/messages/pt-BR.json +++ b/public/intl/messages/pt-BR.json @@ -17,6 +17,18 @@ "value": "Log de atividade" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -245,6 +257,12 @@ "value": "Ativar link de compartilhamento" } ], + "label.event": [ + { + "type": 0, + "value": "Evento" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +275,18 @@ "value": "Eventos" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -523,6 +553,12 @@ "value": "Papel" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -679,6 +715,12 @@ "value": "Desconhecido" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -715,6 +757,12 @@ "value": "Ver detalhes" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -745,12 +793,180 @@ "value": "Sites" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Ontem" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -923,6 +1139,12 @@ "value": "Sem dados disponíveis." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, diff --git a/public/intl/messages/pt-PT.json b/public/intl/messages/pt-PT.json index e36b5f26..5ad27300 100644 --- a/public/intl/messages/pt-PT.json +++ b/public/intl/messages/pt-PT.json @@ -17,6 +17,18 @@ "value": "Activity log" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -245,6 +257,12 @@ "value": "Ativar link de partilha" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +275,18 @@ "value": "Eventos" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -523,6 +553,12 @@ "value": "Role" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -679,6 +715,12 @@ "value": "Desconhecido" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -715,6 +757,12 @@ "value": "Ver detalhes" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -745,12 +793,180 @@ "value": "Websites" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Yesterday" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -923,6 +1139,12 @@ "value": "Sem dados disponíveis." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, diff --git a/public/intl/messages/ro-RO.json b/public/intl/messages/ro-RO.json index 47984700..346a314f 100644 --- a/public/intl/messages/ro-RO.json +++ b/public/intl/messages/ro-RO.json @@ -17,6 +17,18 @@ "value": "Activity log" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -245,6 +257,12 @@ "value": "Activare adresă URL de distribuire" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +275,18 @@ "value": "Evenimente" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -523,6 +553,12 @@ "value": "Role" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -679,6 +715,12 @@ "value": "Necunoscut" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -715,6 +757,12 @@ "value": "Vizualizare detalii" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -745,12 +793,180 @@ "value": "Site-uri web" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Yesterday" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -919,6 +1135,12 @@ "value": "Nici o informație disponibilă." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, diff --git a/public/intl/messages/ru-RU.json b/public/intl/messages/ru-RU.json index d15b9fac..ee5c1ce7 100644 --- a/public/intl/messages/ru-RU.json +++ b/public/intl/messages/ru-RU.json @@ -17,6 +17,18 @@ "value": "Журнал активности" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -245,6 +257,12 @@ "value": "Разрешить делиться ссылкой" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +275,18 @@ "value": "События" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -523,6 +553,12 @@ "value": "Роль" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -679,6 +715,12 @@ "value": "Неизвестно" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -715,6 +757,12 @@ "value": "Посмотреть детали" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -745,12 +793,180 @@ "value": "Сайты" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Вчера" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -887,6 +1103,12 @@ "value": "Нет данных." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, diff --git a/public/intl/messages/si-LK.json b/public/intl/messages/si-LK.json index e12f3008..9513703c 100644 --- a/public/intl/messages/si-LK.json +++ b/public/intl/messages/si-LK.json @@ -17,6 +17,18 @@ "value": "Activity log" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -245,6 +257,12 @@ "value": "බෙදාගැනීමේ URL සබල කරන්න" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +275,18 @@ "value": "Events" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -523,6 +553,12 @@ "value": "Role" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -679,6 +715,12 @@ "value": "නොදනී" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -715,6 +757,12 @@ "value": "තොරතුරු පෙන්වන්න" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -745,12 +793,180 @@ "value": "වෙබ් අඩවි" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "ඊයේ" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -911,6 +1127,12 @@ "value": "පෙන්වීමට දත්ත නොමැත." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, diff --git a/public/intl/messages/sk-SK.json b/public/intl/messages/sk-SK.json index e475e20f..c449dad1 100644 --- a/public/intl/messages/sk-SK.json +++ b/public/intl/messages/sk-SK.json @@ -17,6 +17,18 @@ "value": "Activity log" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -245,6 +257,12 @@ "value": "Povoliť zdielanie URL" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +275,18 @@ "value": "Udalosti" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -523,6 +553,12 @@ "value": "Role" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -679,6 +715,12 @@ "value": "Neznámý" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -715,6 +757,12 @@ "value": "Zobraziť detaily" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -745,12 +793,180 @@ "value": "Weby" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Yesterday" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -919,6 +1135,12 @@ "value": "Žiadne data." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, diff --git a/public/intl/messages/sl-SI.json b/public/intl/messages/sl-SI.json index d358eaaa..7bc3fd12 100644 --- a/public/intl/messages/sl-SI.json +++ b/public/intl/messages/sl-SI.json @@ -17,6 +17,18 @@ "value": "Activity log" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -245,6 +257,12 @@ "value": "Omogoči URL za skupno rabo" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +275,18 @@ "value": "Dogodki" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -523,6 +553,12 @@ "value": "Role" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -679,6 +715,12 @@ "value": "Neznano" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -715,6 +757,12 @@ "value": "Prikaži podrobnosti" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -745,12 +793,180 @@ "value": "Spletna mesta" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Yesterday" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -919,6 +1135,12 @@ "value": "Podatki niso na voljo." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, diff --git a/public/intl/messages/sv-SE.json b/public/intl/messages/sv-SE.json index dc9ee53c..f602dac9 100644 --- a/public/intl/messages/sv-SE.json +++ b/public/intl/messages/sv-SE.json @@ -17,6 +17,18 @@ "value": "Aktivitetslogg" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -245,6 +257,12 @@ "value": "Aktivera delnings-URL" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +275,18 @@ "value": "Händelser" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -523,6 +553,12 @@ "value": "Roll" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -679,6 +715,12 @@ "value": "Okänd" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -715,6 +757,12 @@ "value": "Visa detaljer" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -745,12 +793,180 @@ "value": "Webbsajt" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Igår" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -923,6 +1139,12 @@ "value": "Ingen data tillgänglig." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, diff --git a/public/intl/messages/ta-IN.json b/public/intl/messages/ta-IN.json index 3f4f03b5..3ce80804 100644 --- a/public/intl/messages/ta-IN.json +++ b/public/intl/messages/ta-IN.json @@ -17,6 +17,18 @@ "value": "Activity log" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -245,6 +257,12 @@ "value": "கள முகவரியை பகிரலாம்" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +275,18 @@ "value": "நிகழ்வுகள்" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -523,6 +553,12 @@ "value": "Role" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -679,6 +715,12 @@ "value": "தெரியாத" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -715,6 +757,12 @@ "value": "விபரங்களை பார்" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -745,12 +793,180 @@ "value": "வலைத்தளங்கள்" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Yesterday" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -919,6 +1135,12 @@ "value": "தரவு எதுவும் கிடைக்கவில்லை." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, diff --git a/public/intl/messages/th-TH.json b/public/intl/messages/th-TH.json index b8b9e46f..bbf90921 100644 --- a/public/intl/messages/th-TH.json +++ b/public/intl/messages/th-TH.json @@ -17,6 +17,18 @@ "value": "Activity log" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -245,6 +257,12 @@ "value": "เปิดใช้งานการแชร์ลิงก์" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +275,18 @@ "value": "เหตุการณ์" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -515,6 +545,12 @@ "value": "Role" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -671,6 +707,12 @@ "value": "ไม่รู้จัก" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -707,6 +749,12 @@ "value": "แสดงรายละเอียด" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -737,12 +785,180 @@ "value": "เว็บไซต์" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Yesterday" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 0, @@ -915,6 +1131,12 @@ "value": "ไม่มีข้อมูล." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, diff --git a/public/intl/messages/tr-TR.json b/public/intl/messages/tr-TR.json index 4fc75603..6767fb3e 100644 --- a/public/intl/messages/tr-TR.json +++ b/public/intl/messages/tr-TR.json @@ -17,6 +17,18 @@ "value": "Activity log" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -245,6 +257,12 @@ "value": "Anonim paylaşım URL'i aktif" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +275,18 @@ "value": "Olaylar" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -523,6 +553,12 @@ "value": "Role" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -679,6 +715,12 @@ "value": "Bilinmeyen" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -715,6 +757,12 @@ "value": "Detayı incele" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -745,12 +793,180 @@ "value": "Web siteleri" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Yesterday" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -891,6 +1107,12 @@ "value": "Henüz hiç veri yok." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, diff --git a/public/intl/messages/uk-UA.json b/public/intl/messages/uk-UA.json index 7ff7f5d0..9db43618 100644 --- a/public/intl/messages/uk-UA.json +++ b/public/intl/messages/uk-UA.json @@ -17,6 +17,18 @@ "value": "Activity log" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -245,6 +257,12 @@ "value": "Дозволити ділитися посиланням" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +275,18 @@ "value": "Події" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -523,6 +553,12 @@ "value": "Role" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -679,6 +715,12 @@ "value": "Невідомо" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -715,6 +757,12 @@ "value": "Переглянути деталі" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -745,12 +793,180 @@ "value": "Сайти" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Yesterday" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -895,6 +1111,12 @@ "value": "Немає даних." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, diff --git a/public/intl/messages/ur-PK.json b/public/intl/messages/ur-PK.json index 196d62c6..d79bfdf1 100644 --- a/public/intl/messages/ur-PK.json +++ b/public/intl/messages/ur-PK.json @@ -17,6 +17,18 @@ "value": "Activity log" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -245,6 +257,12 @@ "value": "شیئر یو آر ایل کو فعال کریں" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +275,18 @@ "value": "واقعات" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -523,6 +553,12 @@ "value": "Role" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -679,6 +715,12 @@ "value": "نامعلوم" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -715,6 +757,12 @@ "value": "تفصیلات دیکھیں" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -745,12 +793,180 @@ "value": "ویب سائٹس" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Yesterday" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -919,6 +1135,12 @@ "value": "مواد موجود نہیں ہے." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, diff --git a/public/intl/messages/vi-VN.json b/public/intl/messages/vi-VN.json index 2a432b00..8b363197 100644 --- a/public/intl/messages/vi-VN.json +++ b/public/intl/messages/vi-VN.json @@ -17,6 +17,18 @@ "value": "Activity log" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -245,6 +257,12 @@ "value": "Bật khả năng chia sẻ URL" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +275,18 @@ "value": "Sự kiện" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -515,6 +545,12 @@ "value": "Role" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -671,6 +707,12 @@ "value": "Không rõ" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -707,6 +749,12 @@ "value": "Xem chi tiết" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -737,12 +785,180 @@ "value": "Websites" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Yesterday" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -911,6 +1127,12 @@ "value": "Không có dữ liệu." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, diff --git a/public/intl/messages/zh-CN.json b/public/intl/messages/zh-CN.json index 075cbf72..55eb231f 100644 --- a/public/intl/messages/zh-CN.json +++ b/public/intl/messages/zh-CN.json @@ -17,6 +17,18 @@ "value": "活动日志" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -245,6 +257,12 @@ "value": "启用共享链接" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +275,18 @@ "value": "行为类别" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -527,6 +557,12 @@ "value": "角色" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -683,6 +719,12 @@ "value": "未知" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -719,6 +761,12 @@ "value": "查看更多" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -749,12 +797,180 @@ "value": "网站" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "昨天" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 0, @@ -903,6 +1119,12 @@ "value": "无可用数据。" } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, diff --git a/public/intl/messages/zh-TW.json b/public/intl/messages/zh-TW.json index 63d9a69e..fa0f5e99 100644 --- a/public/intl/messages/zh-TW.json +++ b/public/intl/messages/zh-TW.json @@ -17,6 +17,18 @@ "value": "Activity log" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -245,6 +257,12 @@ "value": "啟用分享連結" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +275,18 @@ "value": "行為類別" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -523,6 +553,12 @@ "value": "Role" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -679,6 +715,12 @@ "value": "未知" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -715,6 +757,12 @@ "value": "查看更多" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -745,12 +793,180 @@ "value": "網站" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Yesterday" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 0, @@ -899,6 +1115,12 @@ "value": "無可用數據。" } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, diff --git a/queries/admin/team.ts b/queries/admin/team.ts index b965119b..5c3b372f 100644 --- a/queries/admin/team.ts +++ b/queries/admin/team.ts @@ -1,7 +1,7 @@ -import { Prisma, Team, TeamWebsite } from '@prisma/client'; +import { Prisma, Team } from '@prisma/client'; import prisma from 'lib/prisma'; -import { uuid } from 'lib/crypto'; import { ROLES } from 'lib/constants'; +import { uuid } from 'lib/crypto'; export async function getTeam(where: Prisma.TeamWhereInput): Promise { return prisma.client.team.findFirst({ diff --git a/queries/admin/user.ts b/queries/admin/user.ts index c4a5150c..cab8a562 100644 --- a/queries/admin/user.ts +++ b/queries/admin/user.ts @@ -73,7 +73,64 @@ export async function getUserTeams(userId: string): Promise< }); } -export async function getUserWebsites(userId: string): Promise { +export async function getUserWebsites( + userId: string, + options?: { includeTeams: boolean }, +): Promise { + const { rawQuery } = prisma; + + if (options?.includeTeams) { + const websites = await rawQuery( + ` + select + website_id as "id", + name, + domain, + share_id as "shareId", + reset_at as "resetAt", + user_id as "userId", + created_at as "createdAt", + updated_at as "updatedAt", + deleted_at as "deletedAt", + null as "teamId", + null as "teamName" + from website + where user_id = {{userId::uuid}} + and deleted_at is null + union + select + w.website_id as "id", + w.name, + w.domain, + w.share_id as "shareId", + w.reset_at as "resetAt", + w.user_id as "userId", + w.created_at as "createdAt", + w.updated_at as "updatedAt", + w.deleted_at as "deletedAt", + t.team_id as "teamId", + t.name as "teamName" + from website w + inner join team_website tw + on tw.website_id = w.website_id + inner join team t + on t.team_id = tw.team_id + inner join team_user tu + on tu.team_id = tw.team_id + where tu.user_id = {{userId::uuid}} + and w.deleted_at is null + `, + { userId }, + ); + + return websites.reduce((arr, item) => { + if (!arr.find(({ id }) => id === item.id)) { + return arr.concat(item); + } + return arr; + }, []); + } + return prisma.client.website.findMany({ where: { userId, diff --git a/queries/analytics/eventData/getEventDataEvents.ts b/queries/analytics/eventData/getEventDataEvents.ts new file mode 100644 index 00000000..7a926eaf --- /dev/null +++ b/queries/analytics/eventData/getEventDataEvents.ts @@ -0,0 +1,120 @@ +import prisma from 'lib/prisma'; +import clickhouse from 'lib/clickhouse'; +import { CLICKHOUSE, PRISMA, runQuery } from 'lib/db'; +import { WebsiteEventDataFields } from 'lib/types'; +import { loadWebsite } from 'lib/load'; +import { maxDate } from 'lib/date'; + +export async function getEventDataEvents( + ...args: [ + websiteId: string, + startDate: Date, + endDate: Date, + filters: { field?: string; event?: string }, + ] +): Promise { + return runQuery({ + [PRISMA]: () => relationalQuery(...args), + [CLICKHOUSE]: () => clickhouseQuery(...args), + }); +} + +async function relationalQuery( + websiteId: string, + startDate: Date, + endDate: Date, + filters: { field?: string; event?: string }, +) { + const { rawQuery } = prisma; + const website = await loadWebsite(websiteId); + const { field, event } = filters; + + if (event) { + return rawQuery( + ` + select + we.event_name as event, + ed.event_key as field, + ed.string_value as value, + count(ed.*) as total + from event_data as ed + inner join website_event as we + on we.event_id = ed.website_event_id + where ed.website_id = {{websiteId:uuid}} + and ed.event_key = {{field}} + and ed.created_at between {{startDate}} and {{endDate}} + and we.event_name = {{event}} + group by ed.event_key, ed.string_value + order by 3 desc, 2 desc, 1 asc + `, + { ...filters, websiteId, startDate: maxDate(startDate, website.resetAt), endDate }, + ); + } + return rawQuery( + ` + select + we.event_name as event, + ed.event_key as field, + ed.string_value as value, + count(ed.*) as total + from event_data as ed + inner join website_event as we + on we.event_id = ed.website_event_id + where ed.website_id = {{websiteId::uuid}} + and ed.event_key = {{field}} + and ed.created_at between {{startDate}} and {{endDate}} + group by we.event_name, ed.event_key, ed.string_value + order by 3 desc, 2 desc, 1 asc + `, + { websiteId, field, startDate: maxDate(startDate, website.resetAt), endDate }, + ); +} + +async function clickhouseQuery( + websiteId: string, + startDate: Date, + endDate: Date, + filters: { field?: string; event?: string }, +) { + const { rawQuery } = clickhouse; + const website = await loadWebsite(websiteId); + const { event } = filters; + + if (event) { + return rawQuery( + ` + select + event_name as event, + event_key as field, + data_type as type, + string_value as value, + count(*) as total + from event_data + where website_id = {websiteId:UUID} + and created_at between {startDate:DateTime} and {endDate:DateTime} + and event_name = {event:String} + group by event_key, data_type, string_value, event_name + order by 1 asc, 2 asc, 3 asc, 4 desc + limit 100 + `, + { ...filters, websiteId, startDate: maxDate(startDate, website.resetAt), endDate }, + ); + } + + return rawQuery( + ` + select + event_name as event, + event_key as field, + data_type as type, + count(*) as total + from event_data + where website_id = {websiteId:UUID} + and created_at between {startDate:DateTime} and {endDate:DateTime} + group by event_key, data_type, event_name + order by 1 asc, 2 asc + limit 100 + `, + { websiteId, startDate: maxDate(startDate, website.resetAt), endDate }, + ); +} diff --git a/queries/analytics/eventData/getEventDataFields.ts b/queries/analytics/eventData/getEventDataFields.ts index 6306d239..516c58d0 100644 --- a/queries/analytics/eventData/getEventDataFields.ts +++ b/queries/analytics/eventData/getEventDataFields.ts @@ -2,8 +2,8 @@ import prisma from 'lib/prisma'; import clickhouse from 'lib/clickhouse'; import { CLICKHOUSE, PRISMA, runQuery } from 'lib/db'; import { WebsiteEventDataFields } from 'lib/types'; -import { loadWebsite } from 'lib/query'; -import { DEFAULT_CREATED_AT } from 'lib/constants'; +import { loadWebsite } from 'lib/load'; +import { maxDate } from 'lib/date'; export async function getEventDataFields( ...args: [websiteId: string, startDate: Date, endDate: Date, field?: string] @@ -15,82 +15,81 @@ export async function getEventDataFields( } async function relationalQuery(websiteId: string, startDate: Date, endDate: Date, field: string) { - const { toUuid, rawQuery } = prisma; + const { rawQuery } = prisma; const website = await loadWebsite(websiteId); - const resetDate = new Date(website?.resetAt || DEFAULT_CREATED_AT); if (field) { return rawQuery( - `select event_key as field, - string_value as value, - count(*) as total - from event_data - where website_id = $1${toUuid()} - and event_key = $2 - and created_at >= $3 - and created_at between $4 and $5 - group by event_key, string_value - order by 3 desc, 2 desc, 1 asc - limit 100 + ` + select + event_key as field, + string_value as value, + count(*) as total + from event_data + where website_id = {{websiteId::uuid}} + and event_key = {{field}} + and created_at between {{startDate}} and {{endDate}} + group by event_key, string_value + order by 3 desc, 2 desc, 1 asc + limit 100 `, - [websiteId, field, resetDate, startDate, endDate] as any, + { websiteId, field, startDate: maxDate(startDate, website.resetAt), endDate }, ); } return rawQuery( - `select - event_key as field, - data_type as type, - count(*) as total - from event_data - where website_id = $1${toUuid()} - and created_at >= $2 - and created_at between $3 and $4 - group by event_key, data_type - order by 3 desc, 2 asc, 1 asc - limit 100 + ` + select + event_key as field, + data_type as type, + count(*) as total + from event_data + where website_id = {{websiteId::uuid}} + and created_at between {{startDate}} and {{endDate}} + group by event_key, data_type + order by 3 desc, 2 asc, 1 asc + limit 100 `, - [websiteId, resetDate, startDate, endDate] as any, + { websiteId, startDate: maxDate(startDate, website.resetAt), endDate }, ); } async function clickhouseQuery(websiteId: string, startDate: Date, endDate: Date, field: string) { - const { rawQuery, getDateFormat, getBetweenDates } = clickhouse; + const { rawQuery } = clickhouse; const website = await loadWebsite(websiteId); - const resetDate = new Date(website?.resetAt || DEFAULT_CREATED_AT); if (field) { return rawQuery( - `select + ` + select event_key as field, string_value as value, count(*) as total - from event_data - where website_id = {websiteId:UUID} - and event_key = {field:String} - and created_at >= ${getDateFormat(resetDate)} - and ${getBetweenDates('created_at', startDate, endDate)} - group by event_key, string_value - order by 3 desc, 2 desc, 1 asc - limit 100 - `, - { websiteId, field }, + from event_data + where website_id = {websiteId:UUID} + and event_key = {field:String} + and created_at between {startDate:DateTime} and {endDate:DateTime} + group by event_key, string_value + order by 3 desc, 2 desc, 1 asc + limit 100 + `, + { websiteId, field, startDate: maxDate(startDate, website.resetAt), endDate }, ); } return rawQuery( - `select - event_key as field, - data_type as type, - count(*) as total - from event_data - where website_id = {websiteId:UUID} - and created_at >= ${getDateFormat(resetDate)} - and ${getBetweenDates('created_at', startDate, endDate)} - group by event_key, data_type - order by 3 desc, 2 asc, 1 asc - limit 100 + ` + select + event_key as field, + data_type as type, + count(*) as total + from event_data + where website_id = {websiteId:UUID} + and created_at between {startDate:DateTime} and {endDate:DateTime} + group by event_key, data_type + order by 3 desc, 2 asc, 1 asc + limit 100 `, - { websiteId }, + { websiteId, startDate: maxDate(startDate, website.resetAt), endDate }, ); } diff --git a/queries/analytics/eventData/getEventDataUsage.ts b/queries/analytics/eventData/getEventDataUsage.ts index 5d470c3c..78bf7c91 100644 --- a/queries/analytics/eventData/getEventDataUsage.ts +++ b/queries/analytics/eventData/getEventDataUsage.ts @@ -1,28 +1,26 @@ import clickhouse from 'lib/clickhouse'; -import { CLICKHOUSE, PRISMA, runQuery } from 'lib/db'; +import { CLICKHOUSE, PRISMA, runQuery, notImplemented } from 'lib/db'; export function getEventDataUsage(...args: [websiteIds: string[], startDate: Date, endDate: Date]) { return runQuery({ - [PRISMA]: () => relationalQuery(...args), + [PRISMA]: notImplemented, [CLICKHOUSE]: () => clickhouseQuery(...args), }); } -function relationalQuery(websiteIds: string[], startDate: Date, endDate: Date) { - throw new Error('Not Implemented'); -} - function clickhouseQuery(websiteIds: string[], startDate: Date, endDate: Date) { const { rawQuery } = clickhouse; return rawQuery( - `select - website_id as websiteId, - count(*) as count + ` + select + website_id as websiteId, + count(*) as count from event_data where created_at between {startDate:DateTime64} and {endDate:DateTime64} - and website_id in {websiteIds:Array(UUID)} - group by website_id`, + and website_id in {websiteIds:Array(UUID)} + group by website_id + `, { websiteIds, startDate, diff --git a/queries/analytics/eventData/saveEventData.ts b/queries/analytics/eventData/saveEventData.ts index f30ceb90..97b1c882 100644 --- a/queries/analytics/eventData/saveEventData.ts +++ b/queries/analytics/eventData/saveEventData.ts @@ -31,7 +31,7 @@ async function relationalQuery(data: { const jsonKeys = flattenJSON(eventData); - //id, websiteEventId, eventStringValue + // id, websiteEventId, eventStringValue const flattendData = jsonKeys.map(a => ({ id: uuid(), websiteEventId: eventId, @@ -76,7 +76,9 @@ async function clickhouseQuery(data: { event_name: eventName, event_key: a.key, string_value: - a.dynamicDataType === DATA_TYPE.date ? getDateFormat(a.value, 'isoUtcDateTime') : a.value, + a.dynamicDataType === DATA_TYPE.date + ? getDateFormat(a.value, 'isoUtcDateTime') + : a.value.toString(), number_value: a.dynamicDataType === DATA_TYPE.number ? a.value : null, date_value: a.dynamicDataType === DATA_TYPE.date ? getDateFormat(a.value) : null, data_type: a.dynamicDataType, diff --git a/queries/analytics/event/getEventMetrics.ts b/queries/analytics/events/getEventMetrics.ts similarity index 61% rename from queries/analytics/event/getEventMetrics.ts rename to queries/analytics/events/getEventMetrics.ts index ea05dae4..37044d1b 100644 --- a/queries/analytics/event/getEventMetrics.ts +++ b/queries/analytics/events/getEventMetrics.ts @@ -2,8 +2,9 @@ import prisma from 'lib/prisma'; import clickhouse from 'lib/clickhouse'; import { runQuery, CLICKHOUSE, PRISMA } from 'lib/db'; import { WebsiteEventMetric } from 'lib/types'; -import { DEFAULT_CREATED_AT, EVENT_TYPE } from 'lib/constants'; -import { loadWebsite } from 'lib/query'; +import { DEFAULT_RESET_DATE, EVENT_TYPE } from 'lib/constants'; +import { loadWebsite } from 'lib/load'; +import { maxDate } from 'lib/date'; export async function getEventMetrics( ...args: [ @@ -45,26 +46,31 @@ async function relationalQuery( }; }, ) { - const { toUuid, rawQuery, getDateQuery, getFilterQuery } = prisma; + const { rawQuery, getDateQuery, getFilterQuery } = prisma; const website = await loadWebsite(websiteId); - const resetDate = new Date(website?.resetAt || DEFAULT_CREATED_AT); - const params: any = [websiteId, resetDate, startDate, endDate]; - const filterQuery = getFilterQuery(filters, params); + const filterQuery = getFilterQuery(filters); return rawQuery( - `select + ` + select event_name x, ${getDateQuery('created_at', unit, timezone)} t, count(*) y from website_event - where website_id = $1${toUuid()} - and created_at >= $2 - and created_at between $3 and $4 - and event_type = ${EVENT_TYPE.customEvent} + where website_id = {{websiteId::uuid}} + and created_at between {{startDate}} and {{endDate}} + and event_type = {{eventType}} ${filterQuery} group by 1, 2 - order by 2`, - params, + order by 2 + `, + { + ...filters, + websiteId, + startDate: maxDate(startDate, website.resetAt), + endDate, + eventType: EVENT_TYPE.customEvent, + }, ); } @@ -87,24 +93,30 @@ async function clickhouseQuery( }; }, ) { - const { rawQuery, getDateQuery, getDateFormat, getBetweenDates, getFilterQuery } = clickhouse; + const { rawQuery, getDateQuery, getFilterQuery } = clickhouse; const website = await loadWebsite(websiteId); - const resetDate = new Date(website?.resetAt || DEFAULT_CREATED_AT); - const params = { websiteId }; + const filterQuery = getFilterQuery(filters); return rawQuery( - `select + ` + select event_name x, ${getDateQuery('created_at', unit, timezone)} t, count(*) y from website_event where website_id = {websiteId:UUID} - and event_type = ${EVENT_TYPE.customEvent} - and created_at >= ${getDateFormat(resetDate)} - and ${getBetweenDates('created_at', startDate, endDate)} - ${getFilterQuery(filters, params)} + and created_at between {startDate:DateTime} and {endDate:DateTime} + and event_type = {eventType:UInt32} + ${filterQuery} group by x, t - order by t`, - params, + order by t + `, + { + ...filters, + websiteId, + startDate: maxDate(startDate, website.resetAt), + endDate, + eventType: EVENT_TYPE.customEvent, + }, ); } diff --git a/queries/analytics/event/getEventUsage.ts b/queries/analytics/events/getEventUsage.ts similarity index 51% rename from queries/analytics/event/getEventUsage.ts rename to queries/analytics/events/getEventUsage.ts index 1465264c..e8ed975f 100644 --- a/queries/analytics/event/getEventUsage.ts +++ b/queries/analytics/events/getEventUsage.ts @@ -1,28 +1,26 @@ import clickhouse from 'lib/clickhouse'; -import { CLICKHOUSE, PRISMA, runQuery } from 'lib/db'; +import { CLICKHOUSE, PRISMA, runQuery, notImplemented } from 'lib/db'; export function getEventUsage(...args: [websiteIds: string[], startDate: Date, endDate: Date]) { return runQuery({ - [PRISMA]: () => relationalQuery(...args), + [PRISMA]: notImplemented, [CLICKHOUSE]: () => clickhouseQuery(...args), }); } -function relationalQuery(websiteIds: string[], startDate: Date, endDate: Date) { - throw new Error('Not Implemented'); -} - function clickhouseQuery(websiteIds: string[], startDate: Date, endDate: Date) { const { rawQuery } = clickhouse; return rawQuery( - `select - website_id as websiteId, - count(*) as count + ` + select + website_id as websiteId, + count(*) as count from website_event - where created_at between {startDate:DateTime64} and {endDate:DateTime64} - and website_id in {websiteIds:Array(UUID)} - group by website_id`, + where website_id in {websiteIds:Array(UUID)} + and created_at between {startDate:DateTime64} and {endDate:DateTime64} + group by website_id + `, { websiteIds, startDate, diff --git a/queries/analytics/event/getEvents.ts b/queries/analytics/events/getEvents.ts similarity index 63% rename from queries/analytics/event/getEvents.ts rename to queries/analytics/events/getEvents.ts index 8197019d..17528d66 100644 --- a/queries/analytics/event/getEvents.ts +++ b/queries/analytics/events/getEvents.ts @@ -2,30 +2,31 @@ import clickhouse from 'lib/clickhouse'; import { CLICKHOUSE, PRISMA, runQuery } from 'lib/db'; import prisma from 'lib/prisma'; -export function getEvents(...args: [websiteId: string, startAt: Date, eventType: number]) { +export function getEvents(...args: [websiteId: string, startDate: Date, eventType: number]) { return runQuery({ [PRISMA]: () => relationalQuery(...args), [CLICKHOUSE]: () => clickhouseQuery(...args), }); } -function relationalQuery(websiteId: string, startAt: Date, eventType: number) { +function relationalQuery(websiteId: string, startDate: Date, eventType: number) { return prisma.client.websiteEvent.findMany({ where: { websiteId, eventType, createdAt: { - gte: startAt, + gte: startDate, }, }, }); } -function clickhouseQuery(websiteId: string, startAt: Date, eventType: number) { +function clickhouseQuery(websiteId: string, startDate: Date, eventType: number) { const { rawQuery } = clickhouse; return rawQuery( - `select + ` + select event_id as id, website_id as websiteId, session_id as sessionId, @@ -35,12 +36,13 @@ function clickhouseQuery(websiteId: string, startAt: Date, eventType: number) { referrer_domain as referrerDomain, event_name as eventName from website_event - where event_type = {eventType:UInt32} - and website_id = {websiteId:UUID} - and created_at >= {startAt:DateTime('UTC')}`, + where website_id = {websiteId:UUID} + and created_at >= {startDate:DateTime} + and event_type = {eventType:UInt32} + `, { websiteId, - startAt, + startDate, eventType, }, ); diff --git a/queries/analytics/event/saveEvent.ts b/queries/analytics/events/saveEvent.ts similarity index 100% rename from queries/analytics/event/saveEvent.ts rename to queries/analytics/events/saveEvent.ts diff --git a/queries/analytics/pageview/getPageviewFunnel.ts b/queries/analytics/pageview/getPageviewFunnel.ts deleted file mode 100644 index bfd921c1..00000000 --- a/queries/analytics/pageview/getPageviewFunnel.ts +++ /dev/null @@ -1,114 +0,0 @@ -import clickhouse from 'lib/clickhouse'; -import { CLICKHOUSE, PRISMA, runQuery } from 'lib/db'; -import prisma from 'lib/prisma'; - -export async function getPageviewFunnel( - ...args: [ - websiteId: string, - criteria: { - windowMinutes: number; - startDate: Date; - endDate: Date; - urls: string[]; - }, - ] -) { - return runQuery({ - [PRISMA]: () => relationalQuery(...args), - [CLICKHOUSE]: () => clickhouseQuery(...args), - }); -} - -async function relationalQuery( - websiteId: string, - criteria: { - windowMinutes: number; - startDate: Date; - endDate: Date; - urls: string[]; - }, -): Promise< - { - x: string; - y: number; - }[] -> { - const { windowMinutes, startDate, endDate, urls } = criteria; - const { rawQuery, getFunnelQuery, toUuid } = prisma; - const { levelQuery, sumQuery, urlFilterQuery } = getFunnelQuery(urls, windowMinutes); - - const params: any = [websiteId, startDate, endDate, ...urls]; - - return rawQuery( - `WITH level0 AS ( - select distinct session_id, url_path, referrer_path, created_at - from website_event - where url_path in (${urlFilterQuery}) - and website_id = $1${toUuid()} - and created_at between $2 and $3 - ),level1 AS ( - select distinct session_id, url_path as level_1_url, created_at as level_1_created_at - from level0 - where url_path = $4 - )${levelQuery} - - SELECT ${sumQuery} - from level${urls.length}; - `, - params, - ).then((a: { [key: string]: number }) => { - return urls.map((b, i) => ({ x: b, y: a[0][`level${i + 1}`] || 0 })); - }); -} - -async function clickhouseQuery( - websiteId: string, - criteria: { - windowMinutes: number; - startDate: Date; - endDate: Date; - urls: string[]; - }, -): Promise< - { - x: string; - y: number; - }[] -> { - const { windowMinutes, startDate, endDate, urls } = criteria; - const { rawQuery, getBetweenDates, getFunnelQuery } = clickhouse; - const { columnsQuery, conditionQuery, urlParams } = getFunnelQuery(urls); - - const params = { - websiteId, - window: windowMinutes * 60, - ...urlParams, - }; - - return rawQuery<{ level: number; count: number }[]>( - ` - SELECT level, - count(*) AS count - FROM ( - SELECT session_id, - windowFunnel({window:UInt32}, 'strict_increase') - ( - created_at - ${columnsQuery} - ) AS level - FROM website_event - WHERE website_id = {websiteId:UUID} - and ${getBetweenDates('created_at', startDate, endDate)} - GROUP BY 1 - ) - GROUP BY level - ORDER BY level ASC; - `, - params, - ).then(results => { - return urls.map((a, i) => ({ - x: a, - y: results[i + 1]?.count || 0, - })); - }); -} diff --git a/queries/analytics/pageview/getPageviewStats.ts b/queries/analytics/pageview/getPageviewStats.ts deleted file mode 100644 index 989a6d4d..00000000 --- a/queries/analytics/pageview/getPageviewStats.ts +++ /dev/null @@ -1,120 +0,0 @@ -import clickhouse from 'lib/clickhouse'; -import { CLICKHOUSE, PRISMA, runQuery } from 'lib/db'; -import prisma from 'lib/prisma'; -import { DEFAULT_CREATED_AT, EVENT_TYPE } from 'lib/constants'; -import { loadWebsite } from 'lib/query'; - -export async function getPageviewStats( - ...args: [ - websiteId: string, - criteria: { - startDate: Date; - endDate: Date; - timezone?: string; - unit?: string; - count?: string; - filters: object; - sessionKey?: string; - }, - ] -) { - return runQuery({ - [PRISMA]: () => relationalQuery(...args), - [CLICKHOUSE]: () => clickhouseQuery(...args), - }); -} - -async function relationalQuery( - websiteId: string, - criteria: { - startDate: Date; - endDate: Date; - timezone?: string; - unit?: string; - count?: string; - filters: object; - sessionKey?: string; - }, -) { - const { - startDate, - endDate, - timezone = 'utc', - unit = 'day', - count = '*', - filters = {}, - sessionKey = 'session_id', - } = criteria; - const { toUuid, getDateQuery, parseFilters, rawQuery } = prisma; - const website = await loadWebsite(websiteId); - const resetDate = new Date(website?.resetAt || DEFAULT_CREATED_AT); - const params: any = [websiteId, resetDate, startDate, endDate]; - const { filterQuery, joinSession } = parseFilters(filters, params); - - return rawQuery( - `select ${getDateQuery('website_event.created_at', unit, timezone)} x, - count(${count !== '*' ? `${count}${sessionKey}` : count}) y - from website_event - ${joinSession} - where website_event.website_id = $1${toUuid()} - and website_event.created_at >= $2 - and website_event.created_at between $3 and $4 - and event_type = ${EVENT_TYPE.pageView} - ${filterQuery} - group by 1`, - params, - ); -} - -async function clickhouseQuery( - websiteId: string, - criteria: { - startDate: Date; - endDate: Date; - timezone?: string; - unit?: string; - count?: string; - filters: object; - sessionKey?: string; - }, -) { - const { - startDate, - endDate, - timezone = 'UTC', - unit = 'day', - count = '*', - filters = {}, - } = criteria; - const { - parseFilters, - getDateFormat, - rawQuery, - getDateStringQuery, - getDateQuery, - getBetweenDates, - } = clickhouse; - const website = await loadWebsite(websiteId); - const resetDate = new Date(website?.resetAt || DEFAULT_CREATED_AT); - const params = { websiteId }; - const { filterQuery } = parseFilters(filters, params); - - return rawQuery( - `select - ${getDateStringQuery('g.t', unit)} as x, - g.y as y - from - (select - ${getDateQuery('created_at', unit, timezone)} t, - count(${count !== '*' ? 'distinct session_id' : count}) y - from website_event - where website_id = {websiteId:UUID} - and event_type = ${EVENT_TYPE.pageView} - and created_at >= ${getDateFormat(resetDate)} - and ${getBetweenDates('created_at', startDate, endDate)} - ${filterQuery} - group by t) g - order by t`, - params, - ); -} diff --git a/queries/analytics/pageview/getPageviewMetrics.ts b/queries/analytics/pageviews/getPageviewMetrics.ts similarity index 63% rename from queries/analytics/pageview/getPageviewMetrics.ts rename to queries/analytics/pageviews/getPageviewMetrics.ts index 5f575a89..677de980 100644 --- a/queries/analytics/pageview/getPageviewMetrics.ts +++ b/queries/analytics/pageviews/getPageviewMetrics.ts @@ -1,8 +1,9 @@ import prisma from 'lib/prisma'; import clickhouse from 'lib/clickhouse'; import { runQuery, CLICKHOUSE, PRISMA } from 'lib/db'; -import { DEFAULT_CREATED_AT, EVENT_TYPE } from 'lib/constants'; -import { loadWebsite } from 'lib/query'; +import { EVENT_TYPE } from 'lib/constants'; +import { loadWebsite } from 'lib/load'; +import { maxDate } from 'lib/date'; export async function getPageviewMetrics( ...args: [ @@ -31,39 +32,40 @@ async function relationalQuery( }, ) { const { startDate, endDate, filters = {}, column } = criteria; - const { rawQuery, parseFilters, toUuid } = prisma; + const { rawQuery, parseFilters } = prisma; const website = await loadWebsite(websiteId); - const resetDate = new Date(website?.resetAt || DEFAULT_CREATED_AT); - const params: any = [ + const params: any = { websiteId, - resetDate, - startDate, + startDate: maxDate(startDate, website.resetAt), endDate, - column === 'event_name' ? EVENT_TYPE.customEvent : EVENT_TYPE.pageView, - ]; + eventType: column === 'event_name' ? EVENT_TYPE.customEvent : EVENT_TYPE.pageView, + }; let excludeDomain = ''; if (column === 'referrer_domain') { - excludeDomain = 'and website_event.referrer_domain != $6'; - params.push(website.domain); + excludeDomain = + 'and (website_event.referrer_domain != {{domain}} or website_event.referrer_domain is null)'; + + params.domain = website.domain; } - const { filterQuery, joinSession } = parseFilters(filters, params); + const { filterQuery, joinSession } = parseFilters(filters); return rawQuery( - `select ${column} x, count(*) y + ` + select ${column} x, count(*) y from website_event ${joinSession} - where website_event.website_id = $1${toUuid()} - and website_event.created_at >= $2 - and website_event.created_at between $3 and $4 - and event_type = $5 + where website_event.website_id = {{websiteId::uuid}} + and website_event.created_at between {{startDate}} and {{endDate}} + and event_type = {{eventType}} ${excludeDomain} ${filterQuery} group by 1 order by 2 desc - limit 100`, + limit 100 + `, params, ); } @@ -78,11 +80,12 @@ async function clickhouseQuery( }, ) { const { startDate, endDate, filters = {}, column } = criteria; - const { rawQuery, getDateFormat, parseFilters, getBetweenDates } = clickhouse; + const { rawQuery, parseFilters } = clickhouse; const website = await loadWebsite(websiteId); - const resetDate = new Date(website?.resetAt || DEFAULT_CREATED_AT); const params = { websiteId, + startDate: maxDate(startDate, website.resetAt), + endDate, eventType: column === 'event_name' ? EVENT_TYPE.customEvent : EVENT_TYPE.pageView, domain: undefined, }; @@ -97,17 +100,18 @@ async function clickhouseQuery( const { filterQuery } = parseFilters(filters, params); return rawQuery( - `select ${column} x, count(*) y + ` + select ${column} x, count(*) y from website_event where website_id = {websiteId:UUID} + and created_at between {startDate:DateTime} and {endDate:DateTime} and event_type = {eventType:UInt32} - and created_at >= ${getDateFormat(resetDate)} - and ${getBetweenDates('created_at', startDate, endDate)} ${excludeDomain} ${filterQuery} group by x order by y desc - limit 100`, + limit 100 + `, params, ); } diff --git a/queries/analytics/pageviews/getPageviewStats.ts b/queries/analytics/pageviews/getPageviewStats.ts new file mode 100644 index 00000000..31b0ebdd --- /dev/null +++ b/queries/analytics/pageviews/getPageviewStats.ts @@ -0,0 +1,103 @@ +import clickhouse from 'lib/clickhouse'; +import { CLICKHOUSE, PRISMA, runQuery } from 'lib/db'; +import prisma from 'lib/prisma'; +import { EVENT_TYPE } from 'lib/constants'; +import { loadWebsite } from 'lib/load'; +import { maxDate } from 'lib/date'; + +export interface PageviewStatsCriteria { + startDate: Date; + endDate: Date; + timezone?: string; + unit?: string; + count?: string; + filters: object; + sessionKey?: string; +} + +export async function getPageviewStats( + ...args: [websiteId: string, criteria: PageviewStatsCriteria] +) { + return runQuery({ + [PRISMA]: () => relationalQuery(...args), + [CLICKHOUSE]: () => clickhouseQuery(...args), + }); +} + +async function relationalQuery(websiteId: string, criteria: PageviewStatsCriteria) { + const { + startDate, + endDate, + timezone = 'utc', + unit = 'day', + count = '*', + filters = {}, + sessionKey = 'session_id', + } = criteria; + const { getDateQuery, parseFilters, rawQuery } = prisma; + const website = await loadWebsite(websiteId); + const { filterQuery, joinSession } = parseFilters(filters); + + return rawQuery( + ` + select + ${getDateQuery('website_event.created_at', unit, timezone)} x, + count(${count !== '*' ? `${count}${sessionKey}` : count}) y + from website_event + ${joinSession} + where website_event.website_id = {{websiteId::uuid}} + and website_event.created_at between {{startDate}} and {{endDate}} + and event_type = {{eventType}} + ${filterQuery} + group by 1 + `, + { + ...filters, + websiteId, + startDate: maxDate(startDate, website.resetAt), + endDate, + eventType: EVENT_TYPE.pageView, + }, + ); +} + +async function clickhouseQuery(websiteId: string, criteria: PageviewStatsCriteria) { + const { + startDate, + endDate, + timezone = 'UTC', + unit = 'day', + count = '*', + filters = {}, + } = criteria; + const { parseFilters, rawQuery, getDateStringQuery, getDateQuery } = clickhouse; + const website = await loadWebsite(websiteId); + const { filterQuery } = parseFilters(filters); + + return rawQuery( + ` + select + ${getDateStringQuery('g.t', unit)} as x, + g.y as y + from ( + select + ${getDateQuery('created_at', unit, timezone)} as t, + count(${count !== '*' ? 'distinct session_id' : count}) as y + from website_event + where website_id = {websiteId:UUID} + and created_at between {startDate:DateTime} and {endDate:DateTime} + and event_type = {eventType:UInt32} + ${filterQuery} + group by t + ) as g + order by t + `, + { + ...filters, + websiteId, + startDate: maxDate(startDate, website.resetAt), + endDate, + eventType: EVENT_TYPE.pageView, + }, + ); +} diff --git a/queries/analytics/reports/getFunnel.ts b/queries/analytics/reports/getFunnel.ts new file mode 100644 index 00000000..3c5c65e0 --- /dev/null +++ b/queries/analytics/reports/getFunnel.ts @@ -0,0 +1,206 @@ +import clickhouse from 'lib/clickhouse'; +import { CLICKHOUSE, PRISMA, runQuery } from 'lib/db'; +import prisma from 'lib/prisma'; + +export async function getFunnel( + ...args: [ + websiteId: string, + criteria: { + windowMinutes: number; + startDate: Date; + endDate: Date; + urls: string[]; + }, + ] +) { + return runQuery({ + [PRISMA]: () => relationalQuery(...args), + [CLICKHOUSE]: () => clickhouseQuery(...args), + }); +} + +async function relationalQuery( + websiteId: string, + criteria: { + windowMinutes: number; + startDate: Date; + endDate: Date; + urls: string[]; + }, +): Promise< + { + x: string; + y: number; + z: number; + }[] +> { + const { windowMinutes, startDate, endDate, urls } = criteria; + const { rawQuery, getAddMinutesQuery } = prisma; + const { levelQuery, sumQuery } = getFunnelQuery(urls, windowMinutes); + + function getFunnelQuery( + urls: string[], + windowMinutes: number, + ): { + levelQuery: string; + sumQuery: string; + } { + return urls.reduce( + (pv, cv, i) => { + const levelNumber = i + 1; + const startSum = i > 0 ? 'union ' : ''; + + if (levelNumber >= 2) { + pv.levelQuery += ` + , level${levelNumber} AS ( + select distinct we.session_id, we.created_at + from level${i} l + join website_event we + on l.session_id = we.session_id + where we.created_at between l.created_at + and ${getAddMinutesQuery(`l.created_at `, windowMinutes)} + and we.referrer_path = {{${i - 1}}} + and we.url_path = {{${i}}} + and we.created_at <= {{endDate}} + and we.website_id = {{websiteId::uuid}} + )`; + } + + pv.sumQuery += `\n${startSum}select ${levelNumber} as level, count(distinct(session_id)) as count from level${levelNumber}`; + + return pv; + }, + { + levelQuery: '', + sumQuery: '', + }, + ); + } + + return rawQuery( + ` + WITH level1 AS ( + select distinct session_id, created_at + from website_event + where website_id = {{websiteId::uuid}} + and created_at between {{startDate}} and {{endDate}} + and url_path = {{0}} + ) + ${levelQuery} + ${sumQuery} + ORDER BY level; + `, + { + websiteId, + startDate, + endDate, + ...urls, + }, + ).then(results => { + return urls.map((a, i) => ({ + x: a, + y: results[i]?.count || 0, + z: (1 - Number(results[i]?.count) / Number(results[i - 1]?.count)) * 100 || 0, // drop off + })); + }); +} + +async function clickhouseQuery( + websiteId: string, + criteria: { + windowMinutes: number; + startDate: Date; + endDate: Date; + urls: string[]; + }, +): Promise< + { + x: string; + y: number; + z: number; + }[] +> { + const { windowMinutes, startDate, endDate, urls } = criteria; + const { rawQuery } = clickhouse; + const { levelQuery, sumQuery, urlFilterQuery, urlParams } = getFunnelQuery(urls, windowMinutes); + + function getFunnelQuery( + urls: string[], + windowMinutes: number, + ): { + levelQuery: string; + sumQuery: string; + urlFilterQuery: string; + urlParams: { [key: string]: string }; + } { + return urls.reduce( + (pv, cv, i) => { + const levelNumber = i + 1; + const startSum = i > 0 ? 'union all ' : ''; + const startFilter = i > 0 ? ', ' : ''; + + if (levelNumber >= 2) { + pv.levelQuery += `\n + , level${levelNumber} AS ( + select distinct y.session_id as session_id, + y.url_path as url_path, + y.referrer_path as referrer_path, + y.created_at as created_at + from level${i} x + join level0 y + on x.session_id = y.session_id + where y.created_at between x.created_at and x.created_at + interval ${windowMinutes} minute + and y.referrer_path = {url${i - 1}:String} + and y.url_path = {url${i}:String} + )`; + } + + pv.sumQuery += `\n${startSum}select ${levelNumber} as level, count(distinct(session_id)) as count from level${levelNumber}`; + pv.urlFilterQuery += `${startFilter}{url${i}:String} `; + pv.urlParams[`url${i}`] = cv; + + return pv; + }, + { + levelQuery: '', + sumQuery: '', + urlFilterQuery: '', + urlParams: {}, + }, + ); + } + + return rawQuery<{ level: number; count: number }[]>( + ` + WITH level0 AS ( + select distinct session_id, url_path, referrer_path, created_at + from umami.website_event + where url_path in (${urlFilterQuery}) + and website_id = {websiteId:UUID} + and created_at between {startDate:DateTime64} and {endDate:DateTime64} + ), + level1 AS ( + select * + from level0 + where url_path = {url0:String} + ) + ${levelQuery} + select * + from ( + ${sumQuery} + ) ORDER BY level; + `, + { + websiteId, + startDate, + endDate, + ...urlParams, + }, + ).then(results => { + return urls.map((a, i) => ({ + x: a, + y: results[i]?.count || 0, + z: (1 - Number(results[i]?.count) / Number(results[i - 1]?.count)) * 100 || 0, // drop off + })); + }); +} diff --git a/queries/analytics/reports/getInsights.ts b/queries/analytics/reports/getInsights.ts new file mode 100644 index 00000000..1d8970ed --- /dev/null +++ b/queries/analytics/reports/getInsights.ts @@ -0,0 +1,42 @@ +import { CLICKHOUSE, PRISMA, runQuery } from 'lib/db'; +import prisma from 'lib/prisma'; +import clickhouse from 'lib/clickhouse'; + +export interface GetInsightsCriteria { + startDate: Date; + endDate: Date; + fields: string[]; + filters: string[]; + groups: string[]; +} + +export async function getInsights(...args: [websiteId: string, criteria: GetInsightsCriteria]) { + return runQuery({ + [PRISMA]: () => relationalQuery(...args), + [CLICKHOUSE]: () => clickhouseQuery(...args), + }); +} + +async function relationalQuery( + websiteId: string, + criteria: GetInsightsCriteria, +): Promise< + { + x: string; + y: number; + }[] +> { + return null; +} + +async function clickhouseQuery( + websiteId: string, + criteria: GetInsightsCriteria, +): Promise< + { + x: string; + y: number; + }[] +> { + return null; +} diff --git a/queries/analytics/session/createSession.ts b/queries/analytics/sessions/createSession.ts similarity index 100% rename from queries/analytics/session/createSession.ts rename to queries/analytics/sessions/createSession.ts diff --git a/queries/analytics/session/getSession.ts b/queries/analytics/sessions/getSession.ts similarity index 100% rename from queries/analytics/session/getSession.ts rename to queries/analytics/sessions/getSession.ts diff --git a/queries/analytics/session/getSessionMetrics.ts b/queries/analytics/sessions/getSessionMetrics.ts similarity index 58% rename from queries/analytics/session/getSessionMetrics.ts rename to queries/analytics/sessions/getSessionMetrics.ts index ef8c79c5..e037176b 100644 --- a/queries/analytics/session/getSessionMetrics.ts +++ b/queries/analytics/sessions/getSessionMetrics.ts @@ -1,8 +1,9 @@ import prisma from 'lib/prisma'; import clickhouse from 'lib/clickhouse'; import { runQuery, CLICKHOUSE, PRISMA } from 'lib/db'; -import { DEFAULT_CREATED_AT, EVENT_TYPE } from 'lib/constants'; -import { loadWebsite } from 'lib/query'; +import { DEFAULT_RESET_DATE, EVENT_TYPE } from 'lib/constants'; +import { loadWebsite } from 'lib/load'; +import { maxDate } from 'lib/date'; export async function getSessionMetrics( ...args: [ @@ -21,11 +22,9 @@ async function relationalQuery( criteria: { startDate: Date; endDate: Date; column: string; filters: object }, ) { const website = await loadWebsite(websiteId); - const resetDate = new Date(website?.resetAt || DEFAULT_CREATED_AT); const { startDate, endDate, column, filters = {} } = criteria; - const { toUuid, parseFilters, rawQuery } = prisma; - const params: any = [websiteId, resetDate, startDate, endDate]; - const { filterQuery, joinSession } = parseFilters(filters, params); + const { parseFilters, rawQuery } = prisma; + const { filterQuery, joinSession } = parseFilters(filters); return rawQuery( `select ${column} x, count(*) y @@ -36,15 +35,14 @@ async function relationalQuery( join website on website_event.website_id = website.website_id ${joinSession} - where website.website_id = $1${toUuid()} - and website_event.created_at >= $2 - and website_event.created_at between $3 and $4 + where website.website_id = {{websiteId::uuid}} + and website_event.created_at between {{startDate}} and {{endDate}} ${filterQuery} ) group by 1 order by 2 desc limit 100`, - params, + { ...filters, websiteId, startDate: maxDate(startDate, website.resetAt), endDate }, ); } @@ -53,23 +51,29 @@ async function clickhouseQuery( data: { startDate: Date; endDate: Date; column: string; filters: object }, ) { const { startDate, endDate, column, filters = {} } = data; - const { getDateFormat, parseFilters, getBetweenDates, rawQuery } = clickhouse; + const { parseFilters, rawQuery } = clickhouse; const website = await loadWebsite(websiteId); - const resetDate = new Date(website?.resetAt || DEFAULT_CREATED_AT); - const params = { websiteId }; - const { filterQuery } = parseFilters(filters, params); + const { filterQuery } = parseFilters(filters); return rawQuery( - `select ${column} x, count(distinct session_id) y + ` + select + ${column} x, count(distinct session_id) y from website_event as x where website_id = {websiteId:UUID} - and event_type = ${EVENT_TYPE.pageView} - and created_at >= ${getDateFormat(resetDate)} - and ${getBetweenDates('created_at', startDate, endDate)} + and created_at between {startDate:DateTime} and {endDate:DateTime} + and event_type = {eventType:UInt32} ${filterQuery} group by x order by y desc - limit 100`, - params, + limit 100 + `, + { + ...filters, + websiteId, + startDate: maxDate(startDate, website.resetAt), + endDate, + eventType: EVENT_TYPE.pageView, + }, ); } diff --git a/queries/analytics/session/getSessions.ts b/queries/analytics/sessions/getSessions.ts similarity index 77% rename from queries/analytics/session/getSessions.ts rename to queries/analytics/sessions/getSessions.ts index a4fbb501..6936f902 100644 --- a/queries/analytics/session/getSessions.ts +++ b/queries/analytics/sessions/getSessions.ts @@ -9,22 +9,23 @@ export async function getSessions(...args: [websiteId: string, startAt: Date]) { }); } -async function relationalQuery(websiteId: string, startAt: Date) { +async function relationalQuery(websiteId: string, startDate: Date) { return prisma.client.session.findMany({ where: { websiteId, createdAt: { - gte: startAt, + gte: startDate, }, }, }); } -async function clickhouseQuery(websiteId: string, startAt: Date) { +async function clickhouseQuery(websiteId: string, startDate: Date) { const { rawQuery } = clickhouse; return rawQuery( - `select distinct + ` + select distinct session_id as id, website_id as websiteId, created_at as createdAt, @@ -41,10 +42,11 @@ async function clickhouseQuery(websiteId: string, startAt: Date) { city from website_event where website_id = {websiteId:UUID} - and created_at >= {startAt:DateTime('UTC')}`, + and created_at >= {startDate:DateTime} + `, { websiteId, - startAt, + startDate, }, ); } diff --git a/queries/analytics/session/saveSessionData.ts b/queries/analytics/sessions/saveSessionData.ts similarity index 100% rename from queries/analytics/session/saveSessionData.ts rename to queries/analytics/sessions/saveSessionData.ts diff --git a/queries/analytics/stats/getActiveVisitors.ts b/queries/analytics/stats/getActiveVisitors.ts index 89f092c1..8dcfd7c9 100644 --- a/queries/analytics/stats/getActiveVisitors.ts +++ b/queries/analytics/stats/getActiveVisitors.ts @@ -11,31 +11,32 @@ export async function getActiveVisitors(...args: [websiteId: string]) { } async function relationalQuery(websiteId: string) { - const { toUuid, rawQuery } = prisma; - - const date = subMinutes(new Date(), 5); - const params: any = [websiteId, date]; + const { rawQuery } = prisma; return rawQuery( - `select count(distinct session_id) x + ` + select count(distinct session_id) x from website_event - join website + join website on website_event.website_id = website.website_id - where website.website_id = $1${toUuid()} - and website_event.created_at >= $2`, - params, + where website.website_id = {{websiteId::uuid}} + and website_event.created_at >= {{startAt}} + `, + { websiteId, startAt: subMinutes(new Date(), 5) }, ); } async function clickhouseQuery(websiteId: string) { const { rawQuery } = clickhouse; - const params = { websiteId, startAt: subMinutes(new Date(), 5) }; return rawQuery( - `select count(distinct session_id) x + ` + select + count(distinct session_id) x from website_event where website_id = {websiteId:UUID} - and created_at >= {startAt:DateTime('UTC')}`, - params, + and created_at >= {startAt:DateTime} + `, + { websiteId, startAt: subMinutes(new Date(), 5) }, ); } diff --git a/queries/analytics/stats/getRealtimeData.ts b/queries/analytics/stats/getRealtimeData.ts index 8c215215..98a5595b 100644 --- a/queries/analytics/stats/getRealtimeData.ts +++ b/queries/analytics/stats/getRealtimeData.ts @@ -1,6 +1,5 @@ -import { md5 } from 'lib/crypto'; -import { getSessions } from '../session/getSessions'; -import { getEvents } from '../event/getEvents'; +import { md5 } from 'next-basics'; +import { getSessions, getEvents } from 'queries'; import { EVENT_TYPE } from 'lib/constants'; export async function getRealtimeData(websiteId, time) { diff --git a/queries/analytics/stats/getWebsiteDateRange.ts b/queries/analytics/stats/getWebsiteDateRange.ts new file mode 100644 index 00000000..45885e45 --- /dev/null +++ b/queries/analytics/stats/getWebsiteDateRange.ts @@ -0,0 +1,51 @@ +import prisma from 'lib/prisma'; +import clickhouse from 'lib/clickhouse'; +import { runQuery, CLICKHOUSE, PRISMA } from 'lib/db'; +import { loadWebsite } from 'lib/load'; +import { DEFAULT_RESET_DATE } from 'lib/constants'; +import { maxDate } from 'lib/date'; + +export async function getWebsiteDateRange(...args: [websiteId: string]) { + return runQuery({ + [PRISMA]: () => relationalQuery(...args), + [CLICKHOUSE]: () => clickhouseQuery(...args), + }); +} + +async function relationalQuery(websiteId: string) { + const { rawQuery } = prisma; + const website = await loadWebsite(websiteId); + + const result = await rawQuery( + ` + select + min(created_at) as mindate, + max(created_at) as maxdate + from website_event + where website_id = {{websiteId::uuid}} + and created_at >= {{startDate}} + `, + { websiteId, startDate: maxDate(new Date(DEFAULT_RESET_DATE), new Date(website.resetAt)) }, + ); + + return result[0] ?? null; +} + +async function clickhouseQuery(websiteId: string) { + const { rawQuery } = clickhouse; + const website = await loadWebsite(websiteId); + + const result = await rawQuery( + ` + select + min(created_at) as mindate, + max(created_at) as maxdate + from website_event + where website_id = {websiteId:UUID} + and created_at >= {startDate:DateTime} + `, + { websiteId, startDate: maxDate(new Date(DEFAULT_RESET_DATE), new Date(website.resetAt)) }, + ); + + return result[0] ?? null; +} diff --git a/queries/analytics/stats/getWebsiteStats.ts b/queries/analytics/stats/getWebsiteStats.ts index 5d5a1f9a..f44abafa 100644 --- a/queries/analytics/stats/getWebsiteStats.ts +++ b/queries/analytics/stats/getWebsiteStats.ts @@ -1,8 +1,9 @@ import prisma from 'lib/prisma'; import clickhouse from 'lib/clickhouse'; import { runQuery, CLICKHOUSE, PRISMA } from 'lib/db'; -import { DEFAULT_CREATED_AT, EVENT_TYPE } from 'lib/constants'; -import { loadWebsite } from 'lib/query'; +import { EVENT_TYPE } from 'lib/constants'; +import { loadWebsite } from 'lib/load'; +import { maxDate } from 'lib/date'; export async function getWebsiteStats( ...args: [ @@ -21,34 +22,41 @@ async function relationalQuery( criteria: { startDate: Date; endDate: Date; filters: object }, ) { const { startDate, endDate, filters = {} } = criteria; - const { toUuid, getDateQuery, getTimestampInterval, parseFilters, rawQuery } = prisma; + const { getDateQuery, getTimestampIntervalQuery, parseFilters, rawQuery } = prisma; const website = await loadWebsite(websiteId); - const resetDate = new Date(website?.resetAt || DEFAULT_CREATED_AT); - const params: any = [websiteId, resetDate, startDate, endDate]; - const { filterQuery, joinSession } = parseFilters(filters, params); + const { filterQuery, joinSession } = parseFilters(filters); return rawQuery( - `select sum(t.c) as "pageviews", - count(distinct t.session_id) as "uniques", - sum(case when t.c = 1 then 1 else 0 end) as "bounces", - sum(t.time) as "totaltime" - from ( - select website_event.session_id, - ${getDateQuery('website_event.created_at', 'hour')}, - count(*) c, - ${getTimestampInterval('website_event.created_at')} as "time" - from website_event - join website - on website_event.website_id = website.website_id - ${joinSession} - where event_type = ${EVENT_TYPE.pageView} - and website.website_id = $1${toUuid()} - and website_event.created_at >= $2 - and website_event.created_at between $3 and $4 - ${filterQuery} - group by 1, 2 - ) t`, - params, + ` + select + sum(t.c) as "pageviews", + count(distinct t.session_id) as "uniques", + sum(case when t.c = 1 then 1 else 0 end) as "bounces", + sum(t.time) as "totaltime" + from ( + select + website_event.session_id, + ${getDateQuery('website_event.created_at', 'hour')}, + count(*) as c, + ${getTimestampIntervalQuery('website_event.created_at')} as "time" + from website_event + join website + on website_event.website_id = website.website_id + ${joinSession} + where event_type = {{eventType}} + and website.website_id = {{websiteId::uuid}} + and website_event.created_at between {{startDate}} and {{endDate}} + ${filterQuery} + group by 1, 2 + ) as t + `, + { + ...filters, + websiteId, + startDate: maxDate(startDate, website.resetAt), + endDate, + eventType: EVENT_TYPE.pageView, + }, ); } @@ -57,32 +65,38 @@ async function clickhouseQuery( criteria: { startDate: Date; endDate: Date; filters: object }, ) { const { startDate, endDate, filters = {} } = criteria; - const { rawQuery, getDateFormat, getDateQuery, getBetweenDates, parseFilters } = clickhouse; + const { rawQuery, getDateQuery, parseFilters } = clickhouse; const website = await loadWebsite(websiteId); - const resetDate = new Date(website?.resetAt || DEFAULT_CREATED_AT); - const params = { websiteId }; - const { filterQuery } = parseFilters(filters, params); + const { filterQuery } = parseFilters(filters); return rawQuery( - `select - sum(t.c) as "pageviews", - count(distinct t.session_id) as "uniques", - sum(if(t.c = 1, 1, 0)) as "bounces", - sum(if(max_time < min_time + interval 1 hour, max_time-min_time, 0)) as "totaltime" - from ( - select session_id, - ${getDateQuery('created_at', 'day')} time_series, - count(*) c, - min(created_at) min_time, - max(created_at) max_time - from website_event - where event_type = ${EVENT_TYPE.pageView} - and website_id = {websiteId:UUID} - and created_at >= ${getDateFormat(resetDate)} - and ${getBetweenDates('created_at', startDate, endDate)} - ${filterQuery} - group by session_id, time_series - ) t;`, - params, + ` + select + sum(t.c) as "pageviews", + count(distinct t.session_id) as "uniques", + sum(if(t.c = 1, 1, 0)) as "bounces", + sum(if(max_time < min_time + interval 1 hour, max_time-min_time, 0)) as "totaltime" + from ( + select + session_id, + ${getDateQuery('created_at', 'day')} time_series, + count(*) c, + min(created_at) min_time, + max(created_at) max_time + from website_event + where website_id = {websiteId:UUID} + and created_at between {startDate:DateTime} and {endDate:DateTime} + and event_type = {eventType:UInt32} + ${filterQuery} + group by session_id, time_series + ) as t; + `, + { + ...filters, + websiteId, + startDate: maxDate(startDate, website.resetAt), + endDate, + eventType: EVENT_TYPE.pageView, + }, ); } diff --git a/queries/index.js b/queries/index.js index b0e4e00b..f86551c4 100644 --- a/queries/index.js +++ b/queries/index.js @@ -3,19 +3,23 @@ export * from './admin/teamUser'; export * from './admin/user'; export * from './admin/report'; export * from './admin/website'; -export * from './analytics/event/getEventMetrics'; -export * from './analytics/event/getEventUsage'; -export * from './analytics/event/getEvents'; +export * from './analytics/events/getEventMetrics'; +export * from './analytics/events/getEventUsage'; +export * from './analytics/events/getEvents'; +export * from './analytics/eventData/getEventDataEvents'; export * from './analytics/eventData/getEventDataFields'; export * from './analytics/eventData/getEventDataUsage'; -export * from './analytics/event/saveEvent'; -export * from './analytics/pageview/getPageviewFunnel'; -export * from './analytics/pageview/getPageviewMetrics'; -export * from './analytics/pageview/getPageviewStats'; -export * from './analytics/session/createSession'; -export * from './analytics/session/getSession'; -export * from './analytics/session/getSessionMetrics'; -export * from './analytics/session/getSessions'; +export * from './analytics/events/saveEvent'; +export * from './analytics/reports/getFunnel'; +export * from './analytics/reports/getInsights'; +export * from './analytics/pageviews/getPageviewMetrics'; +export * from './analytics/pageviews/getPageviewStats'; +export * from './analytics/sessions/createSession'; +export * from './analytics/sessions/getSession'; +export * from './analytics/sessions/getSessionMetrics'; +export * from './analytics/sessions/getSessions'; +export * from './analytics/sessions/saveSessionData'; export * from './analytics/stats/getActiveVisitors'; export * from './analytics/stats/getRealtimeData'; +export * from './analytics/stats/getWebsiteDateRange'; export * from './analytics/stats/getWebsiteStats'; diff --git a/scripts/telemetry.js b/scripts/telemetry.js index 67fe3202..24cd40c9 100644 --- a/scripts/telemetry.js +++ b/scripts/telemetry.js @@ -1,42 +1,24 @@ -const fs = require('fs-extra'); -const path = require('path'); const os = require('os'); const isCI = require('is-ci'); const pkg = require('../package.json'); -const dest = path.resolve(__dirname, '../.next/cache/umami.json'); -const url = 'https://telemetry.umami.is/api/send'; - -async function sendTelemetry(action) { - let json = {}; - - try { - json = await fs.readJSON(dest); - } catch { - // Ignore - } - - try { - await fs.writeJSON(dest, { version: pkg.version }); - } catch { - // Ignore - } +const url = 'https://api.umami.is/v1/telemetry'; +async function sendTelemetry(type) { const { default: isDocker } = await import('is-docker'); const { default: fetch } = await import('node-fetch'); - const upgrade = json.version !== undefined && json.version !== pkg.version; - const payload = { - action, - version: pkg.version, - node: process.version, - platform: os.platform(), - arch: os.arch(), - os: `${os.type()} (${os.version()})`, - docker: isDocker(), - ci: isCI, - prev: json.version, - upgrade, + const data = { + type, + payload: { + version: pkg.version, + node: process.version, + platform: os.platform(), + arch: os.arch(), + os: `${os.type()} (${os.version()})`, + isDocker: isDocker(), + isCi: isCI, + }, }; try { @@ -46,7 +28,7 @@ async function sendTelemetry(action) { headers: { 'Content-Type': 'application/json', }, - body: JSON.stringify(payload), + body: JSON.stringify(data), }); } catch { // Ignore diff --git a/store/websites.js b/store/websites.ts similarity index 52% rename from store/websites.js rename to store/websites.ts index 34f8242d..0d210af6 100644 --- a/store/websites.js +++ b/store/websites.ts @@ -1,28 +1,20 @@ import { create } from 'zustand'; import produce from 'immer'; -import app from './app'; -import { parseDateRange } from 'lib/date'; +import { DateRange } from 'lib/types'; const store = create(() => ({})); -export function getWebsiteDateRange(websiteId) { +export function getWebsiteDateRange(websiteId: string) { return store.getState()?.[websiteId]; } -export function setWebsiteDateRange(websiteId, value) { +export function setWebsiteDateRange(websiteId: string, dateRange: DateRange) { store.setState( produce(state => { if (!state[websiteId]) { state[websiteId] = {}; } - let dateRange = value; - - if (typeof value === 'string') { - const { locale } = app.getState(); - dateRange = parseDateRange(value, locale); - } - state[websiteId].dateRange = { ...dateRange, modified: Date.now() }; return state; diff --git a/yarn.lock b/yarn.lock index db55eeca..275bcd63 100644 --- a/yarn.lock +++ b/yarn.lock @@ -303,7 +303,7 @@ "@babel/highlight@^7.22.5": version "7.22.5" - resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.5.tgz" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.5.tgz#aa6c05c5407a67ebce408162b7ede789b4d22031" integrity sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw== dependencies: "@babel/helper-validator-identifier" "^7.22.5" @@ -1078,19 +1078,19 @@ "@jridgewell/trace-mapping" "0.3.9" "@csstools/css-parser-algorithms@^2.3.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.3.0.tgz#0cc3a656dc2d638370ecf6f98358973bfbd00141" - integrity sha512-dTKSIHHWc0zPvcS5cqGP+/TPFUJB0ekJ9dGKvMAFoNuBFhDPBt9OMGNZiIA5vTiNdGHHBeScYPXIGBMnVOahsA== + version "2.3.1" + resolved "https://registry.yarnpkg.com/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.3.1.tgz#ec4fc764ba45d2bb7ee2774667e056aa95003f3a" + integrity sha512-xrvsmVUtefWMWQsGgFffqWSK03pZ1vfDki4IVIIUxxDKnGBzqNgv0A7SB1oXtVNEkcVO8xi1ZrTL29HhSu5kGA== "@csstools/css-tokenizer@^2.1.1": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@csstools/css-tokenizer/-/css-tokenizer-2.1.1.tgz#07ae11a0a06365d7ec686549db7b729bc036528e" - integrity sha512-GbrTj2Z8MCTUv+52GE0RbFGM527xuXZ0Xa5g0Z+YN573uveS4G0qi6WNOMyz3yrFM/jaILTTwJ0+umx81EzqfA== + version "2.2.0" + resolved "https://registry.yarnpkg.com/@csstools/css-tokenizer/-/css-tokenizer-2.2.0.tgz#9d70e6dcbe94e44c7400a2929928db35c4de32b5" + integrity sha512-wErmsWCbsmig8sQKkM6pFhr/oPha1bHfvxsUY5CYSQxwyhA9Ulrs8EqCgClhg4Tgg2XapVstGqSVcz0xOYizZA== "@csstools/media-query-list-parser@^2.1.2": - version "2.1.2" - resolved "https://registry.yarnpkg.com/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.2.tgz#6ef642b728d30c1009bfbba3211c7e4c11302728" - integrity sha512-M8cFGGwl866o6++vIY7j1AKuq9v57cf+dGepScwCcbut9ypJNr4Cj+LLTWligYUZ0uyhEoJDKt5lvyBfh2L3ZQ== + version "2.1.3" + resolved "https://registry.yarnpkg.com/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.3.tgz#4471ebd436a22019378fe9c8ac8c0f30c4fbb796" + integrity sha512-ATul1u+pic4aVpstgueqxEv4MsObEbszAxfTXpx9LHaeD3LAh+wFqdCteyegWmjk0k5rkSCAvIOaJe9U3DD09w== "@csstools/postcss-cascade-layers@^1.1.1": version "1.1.1" @@ -1325,15 +1325,15 @@ dependencies: eslint-visitor-keys "^3.3.0" -"@eslint-community/regexpp@^4.4.0": - version "4.5.1" - resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.5.1.tgz#cdd35dce4fa1a89a4fd42b1599eb35b3af408884" - integrity sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ== +"@eslint-community/regexpp@^4.4.0", "@eslint-community/regexpp@^4.6.1": + version "4.6.2" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.6.2.tgz#1816b5f6948029c5eaacb0703b850ee0cb37d8f8" + integrity sha512-pPTNuaAG3QMH+buKyBIGJs3g/S5y0caxw0ygM3YyE6yJFySwiGGSzA+mM3KJ8QQvzeLh3blwgSonkFjgQdxzMw== -"@eslint/eslintrc@^2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.0.tgz#82256f164cc9e0b59669efc19d57f8092706841d" - integrity sha512-Lj7DECXqIVCqnqjjHMPna4vn6GJcMgul/wuS0je9OZ9gsL0zzDpKPVtcG1HaDVc+9y+qgXneTeUMbCqXJNpH1A== +"@eslint/eslintrc@^2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.1.tgz#18d635e24ad35f7276e8a49d135c7d3ca6a46f93" + integrity sha512-9t7ZA7NGGK8ckelF0PQCfcxIUzs1Md5rrO6U/c+FIQNanea5UZC0wqKXH4vHBccmu4ZJgZ2idtPeW7+Q2npOEA== dependencies: ajv "^6.12.4" debug "^4.3.2" @@ -1345,10 +1345,10 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@eslint/js@8.44.0": - version "8.44.0" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.44.0.tgz#961a5903c74139390478bdc808bcde3fc45ab7af" - integrity sha512-Ag+9YM4ocKQx9AarydN0KY2j0ErMHNIocPDrVo8zAE44xLTjEtz81OdR68/cydGtk6m6jDb5Za3r2useMzYmSw== +"@eslint/js@^8.46.0": + version "8.46.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.46.0.tgz#3f7802972e8b6fe3f88ed1aabc74ec596c456db6" + integrity sha512-a8TLtmPi8xzPkCbp/OGFUo5yhRkHM2Ko9kOWP4znJr0WAhWyThaw3PnwX4vOTWOAMsV2uRt32PPDcEz63esSaA== "@fastify/accept-negotiator@^1.1.0": version "1.1.0" @@ -1726,9 +1726,9 @@ unstorage "^1.0.0" "@netlify/plugin-nextjs@^4.27.3": - version "4.39.0" - resolved "https://registry.yarnpkg.com/@netlify/plugin-nextjs/-/plugin-nextjs-4.39.0.tgz#8e447e80f29c0dcc6d45ef2a5f68815e17e72205" - integrity sha512-CkxVG+zidqHLb1nHEx0nMtt7DmSr4a27B4JFxr8jbFU8np9pHiLQ4bR+UvW5tzHdYSfw30Rt9XEQyHo1theq2Q== + version "4.39.1" + resolved "https://registry.yarnpkg.com/@netlify/plugin-nextjs/-/plugin-nextjs-4.39.1.tgz#e9d5abe281389e30d59cf5839496bb2a14a196db" + integrity sha512-gdpTDRYJg8g55MQBy1JMcVJ3UgHC71M/u7BccI9oqvizVtV7ESgyCdJgGFPfZJJGCgWe2ANfQCk1wgA0yosnow== dependencies: "@netlify/esbuild" "0.14.39" "@netlify/functions" "^1.6.0" @@ -1832,22 +1832,22 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" -"@prisma/client@4.15.0": - version "4.15.0" - resolved "https://registry.npmjs.org/@prisma/client/-/client-4.15.0.tgz" - integrity sha512-xnROvyABcGiwqRNdrObHVZkD9EjkJYHOmVdlKy1yGgI+XOzvMzJ4tRg3dz1pUlsyhKxXGCnjIQjWW+2ur+YXuw== +"@prisma/client@5.0.0": + version "5.0.0" + resolved "https://registry.yarnpkg.com/@prisma/client/-/client-5.0.0.tgz#9f0cd4164f4ffddb28bb1811c27eb7fa1e01a087" + integrity sha512-XlO5ELNAQ7rV4cXIDJUNBEgdLwX3pjtt9Q/RHqDpGf43szpNJx2hJnggfFs7TKNx0cOFsl6KJCSfqr5duEU/bQ== dependencies: - "@prisma/engines-version" "4.15.0-28.8fbc245156db7124f997f4cecdd8d1219e360944" + "@prisma/engines-version" "4.17.0-26.6b0aef69b7cdfc787f822ecd7cdc76d5f1991584" -"@prisma/engines-version@4.15.0-28.8fbc245156db7124f997f4cecdd8d1219e360944": - version "4.15.0-28.8fbc245156db7124f997f4cecdd8d1219e360944" - resolved "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-4.15.0-28.8fbc245156db7124f997f4cecdd8d1219e360944.tgz" - integrity sha512-sVOig4tjGxxlYaFcXgE71f/rtFhzyYrfyfNFUsxCIEJyVKU9rdOWIlIwQ2NQ7PntvGnn+x0XuFo4OC1jvPJKzg== +"@prisma/engines-version@4.17.0-26.6b0aef69b7cdfc787f822ecd7cdc76d5f1991584": + version "4.17.0-26.6b0aef69b7cdfc787f822ecd7cdc76d5f1991584" + resolved "https://registry.yarnpkg.com/@prisma/engines-version/-/engines-version-4.17.0-26.6b0aef69b7cdfc787f822ecd7cdc76d5f1991584.tgz#b36eda5620872d3fac810c302a7e46cf41daa033" + integrity sha512-HHiUF6NixsldsP3JROq07TYBLEjXFKr6PdH8H4gK/XAoTmIplOJBCgrIUMrsRAnEuGyRoRLXKXWUb943+PFoKQ== -"@prisma/engines@4.15.0": - version "4.15.0" - resolved "https://registry.npmjs.org/@prisma/engines/-/engines-4.15.0.tgz" - integrity sha512-FTaOCGs0LL0OW68juZlGxFtYviZa4xdQj/rQEdat2txw0s3Vu/saAPKjNVXfIgUsGXmQ72HPgNr6935/P8FNAA== +"@prisma/engines@5.0.0": + version "5.0.0" + resolved "https://registry.yarnpkg.com/@prisma/engines/-/engines-5.0.0.tgz#5249650eabe77c458c90f2be97d8210353c2e22e" + integrity sha512-kyT/8fd0OpWmhAU5YnY7eP31brW1q1YrTGoblWrhQJDiN/1K+Z8S1kylcmtjqx5wsUGcP1HBWutayA/jtyt+sg== "@react-spring/animated@~9.7.3": version "9.7.3" @@ -2249,17 +2249,17 @@ dependencies: tslib "^2.4.0" -"@tanstack/query-core@4.29.19": - version "4.29.19" - resolved "https://registry.yarnpkg.com/@tanstack/query-core/-/query-core-4.29.19.tgz#49ccbd0606633d1e55baf3b91ab7cc7aef411b1d" - integrity sha512-uPe1DukeIpIHpQi6UzIgBcXsjjsDaLnc7hF+zLBKnaUlh7jFE/A+P8t4cU4VzKPMFB/C970n/9SxtpO5hmIRgw== +"@tanstack/query-core@4.32.0": + version "4.32.0" + resolved "https://registry.yarnpkg.com/@tanstack/query-core/-/query-core-4.32.0.tgz#e0f4a830283612430450c13badd353766423f523" + integrity sha512-ei4IYwL2kmlKSlCw9WgvV7PpXi0MiswVwfQRxawhJA690zWO3dU49igaQ/UMTl+Jy9jj9dK5IKAYvbX7kUvviQ== "@tanstack/react-query@^4.16.1": - version "4.29.19" - resolved "https://registry.yarnpkg.com/@tanstack/react-query/-/react-query-4.29.19.tgz#6ba187f2d0ea36ae83ff1f67068f53c88ce7b228" - integrity sha512-XiTIOHHQ5Cw1WUlHaD4fmVUMhoWjuNJlAeJGq7eM4BraI5z7y8WkZO+NR8PSuRnQGblpuVdjClQbDFtwxTtTUw== + version "4.32.0" + resolved "https://registry.yarnpkg.com/@tanstack/react-query/-/react-query-4.32.0.tgz#701b45b149cfd4b54a68705f9100973db3ba5d5d" + integrity sha512-B8WUMcByYAH9500ENejDCATOmEZhqjtS9wsfiQ3BNa+s+yAynY8SESI8WWHhSqUmjd0pmCSFRP6BOUGSda3QXA== dependencies: - "@tanstack/query-core" "4.29.19" + "@tanstack/query-core" "4.32.0" use-sync-external-store "^1.2.0" "@trysound/sax@0.2.0": @@ -2377,7 +2377,7 @@ "@types/json5@^0.0.29": version "0.0.29" - resolved "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz" + resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== "@types/lodash@^4.14.175": @@ -2412,7 +2412,7 @@ "@types/normalize-package-data@^2.4.0": version "2.4.1" - resolved "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz" + resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz#d3357479a0fdfdd5907fe67e17e0a85c906e1301" integrity sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw== "@types/parse-json@^4.0.0": @@ -2774,7 +2774,7 @@ ajv-keywords@^5.0.0: dependencies: fast-deep-equal "^3.1.3" -ajv@^6.10.0, ajv@^6.12.3, ajv@^6.12.4: +ajv@^6.12.3, ajv@^6.12.4: version "6.12.6" resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== @@ -2795,9 +2795,9 @@ ajv@^8.0.0, ajv@^8.8.0: uri-js "^4.2.2" ajv@^8.0.1: - version "8.11.2" - resolved "https://registry.npmjs.org/ajv/-/ajv-8.11.2.tgz" - integrity sha512-E4bfmKAhGiSTvMfL1Myyycaub+cUEU2/IvpylXkUu7CHBkBj1f/ikdzbD7YQ6FKUbixDxeYvB/xY4fvyroDlQg== + version "8.12.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.12.0.tgz#d1a0527323e22f53562c567c00991577dfbe19d1" + integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== dependencies: fast-deep-equal "^3.1.1" json-schema-traverse "^1.0.0" @@ -2823,7 +2823,7 @@ ansi-regex@^5.0.1: ansi-styles@^3.2.1: version "3.2.1" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== dependencies: color-convert "^1.9.0" @@ -2873,6 +2873,14 @@ aria-query@^4.2.2: "@babel/runtime" "^7.10.2" "@babel/runtime-corejs3" "^7.10.2" +array-buffer-byte-length@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz#fabe8bc193fea865f317fe7807085ee0dee5aead" + integrity sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A== + dependencies: + call-bind "^1.0.2" + is-array-buffer "^3.0.1" + array-find-index@^1.0.1: version "1.0.2" resolved "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz" @@ -2894,9 +2902,20 @@ array-union@^2.1.0: resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== +array.prototype.findlastindex@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.2.tgz#bc229aef98f6bd0533a2bc61ff95209875526c9b" + integrity sha512-tb5thFFlUcp7NdNF6/MpDk/1r/4awWG1FIz3YqDf+/zJSTezBb+/5WViH41obXULHVpDzoiCLpJ/ZO9YbJMsdw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + es-shim-unscopables "^1.0.0" + get-intrinsic "^1.1.3" + array.prototype.flat@^1.3.1: version "1.3.1" - resolved "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz#ffc6576a7ca3efc2f46a143b9d1dda9b4b3cf5e2" integrity sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA== dependencies: call-bind "^1.0.2" @@ -2906,7 +2925,7 @@ array.prototype.flat@^1.3.1: array.prototype.flatmap@^1.3.1: version "1.3.1" - resolved "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz" + resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz#1aae7903c2100433cb8261cd4ed310aab5c4a183" integrity sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ== dependencies: call-bind "^1.0.2" @@ -2925,9 +2944,21 @@ array.prototype.tosorted@^1.1.1: es-shim-unscopables "^1.0.0" get-intrinsic "^1.1.3" +arraybuffer.prototype.slice@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.1.tgz#9b5ea3868a6eebc30273da577eb888381c0044bb" + integrity sha512-09x0ZWFEjj4WD8PDbykUwo3t9arLn8NIzmmYEJFpYekOAQjpkGSyrQhNoRTcwwcFRu+ycWF78QZ63oWTqSjBcw== + dependencies: + array-buffer-byte-length "^1.0.0" + call-bind "^1.0.2" + define-properties "^1.2.0" + get-intrinsic "^1.2.1" + is-array-buffer "^3.0.2" + is-shared-array-buffer "^1.0.2" + arrify@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" integrity sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA== asn1@~0.2.3: @@ -2949,7 +2980,7 @@ ast-types-flow@^0.0.7: astral-regex@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== asynckit@^0.4.0: @@ -2976,7 +3007,7 @@ autoprefixer@^10.4.13: available-typed-arrays@^1.0.5: version "1.0.5" - resolved "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== aws-sign2@~0.7.0: @@ -2999,6 +3030,11 @@ axobject-query@^2.2.0: resolved "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz" integrity sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA== +b4a@^1.6.4: + version "1.6.4" + resolved "https://registry.yarnpkg.com/b4a/-/b4a-1.6.4.tgz#ef1c1422cae5ce6535ec191baeed7567443f36c9" + integrity sha512-fpWrvyVHEKyeEvbKZTVOeZF3VSKKWtJxFIxX/jaVPf+cLbGUSitjb49pHLqPV2BUNNZ0LcoeEGfE/YCpyDYHIw== + babel-plugin-polyfill-corejs2@^0.3.3: version "0.3.3" resolved "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz" @@ -3046,7 +3082,7 @@ balanced-match@^1.0.0: balanced-match@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-2.0.0.tgz#dc70f920d78db8b858535795867bf48f820633d9" integrity sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA== base64-js@^1.3.1: @@ -3162,7 +3198,7 @@ busboy@1.6.0: call-bind@^1.0.0, call-bind@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== dependencies: function-bind "^1.1.1" @@ -3240,9 +3276,9 @@ chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.1, chalk@^4.1.2: supports-color "^7.1.0" chart.js@^4.2.1: - version "4.3.0" - resolved "https://registry.yarnpkg.com/chart.js/-/chart.js-4.3.0.tgz#ac363030ab3fec572850d2d872956f32a46326a1" - integrity sha512-ynG0E79xGfMaV2xAHdbhwiPLczxnNNnasrmPEXriXsPJGjmhOBYzFVEsB65w2qMDz+CaBJJuJD0inE/ab/h36g== + version "4.3.2" + resolved "https://registry.yarnpkg.com/chart.js/-/chart.js-4.3.2.tgz#904ebe0376eb368a659a92d2050df47336847e4c" + integrity sha512-pvQNyFOY1QmbmIr8oDORL16/FFivfxj8V26VFpFilMo4cNvkV5WXLJetDio365pd9gKUHGdirUTbqJfw8tr+Dg== dependencies: "@kurkle/color" "^0.3.0" @@ -3281,6 +3317,13 @@ ci-info@^3.2.0: resolved "https://registry.npmjs.org/ci-info/-/ci-info-3.3.0.tgz" integrity sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw== +citty@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/citty/-/citty-0.1.2.tgz#bae07bfd1962439735d7698c7954f76025690603" + integrity sha512-Me9nf0/BEmMOnuQzMOVXgpzkMUNbd0Am8lTl/13p0aRGAoLGk5T5sdet/42CrIGmWdG67BgHUhcKK1my1ujUEg== + dependencies: + consola "^3.2.3" + classnames@^2.3.1: version "2.3.2" resolved "https://registry.npmjs.org/classnames/-/classnames-2.3.2.tgz" @@ -3346,7 +3389,7 @@ cluster-key-slot@^1.1.0: color-convert@^1.9.0: version "1.9.3" - resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== dependencies: color-name "1.1.3" @@ -3360,7 +3403,7 @@ color-convert@^2.0.1: color-name@1.1.3: version "1.1.3" - resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== color-name@^1.0.0, color-name@~1.1.4: @@ -3394,7 +3437,7 @@ colorette@^1.4.0: resolved "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz" integrity sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g== -colorette@^2.0.16, colorette@^2.0.19: +colorette@^2.0.16: version "2.0.20" resolved "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz" integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== @@ -3443,7 +3486,7 @@ concat-with-sourcemaps@^1.1.0: dependencies: source-map "^0.6.1" -consola@^3.1.0: +consola@^3.1.0, consola@^3.2.3: version "3.2.3" resolved "https://registry.yarnpkg.com/consola/-/consola-3.2.3.tgz#0741857aa88cfa0d6fd53f1cff0375136e98502f" integrity sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ== @@ -3565,10 +3608,10 @@ css-declaration-sorter@^6.3.1: resolved "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.4.0.tgz" integrity sha512-jDfsatwWMWN0MODAFuHszfjphEXfNw9JUAhmY4pLu3TyTU+ohUpsbVtbU+1MZn4a47D9kqh03i4eyOm+74+zew== -css-functions-list@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.1.0.tgz" - integrity sha512-/9lCvYZaUbBGvYUgYGFJ4dcYiyqdhSjG7IPVluoV8A1ILjkF7ilmhp1OGUz8n+nmBcu0RNrQAzgD8B6FJbrt2w== +css-functions-list@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/css-functions-list/-/css-functions-list-3.2.0.tgz#8290b7d064bf483f48d6559c10e98dc4d1ad19ee" + integrity sha512-d/jBMPyYybkkLVypgtGv12R+pIFw4/f/IHtCTxWpZc8ofTYOPigIgmA6vu5rMHartZC+WuXhBUHfnyNUIQSYrg== css-has-pseudo@^3.0.4: version "3.0.4" @@ -3640,7 +3683,7 @@ cssdb@^7.1.0: cssesc@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== cssfilter@0.0.10: @@ -3818,7 +3861,7 @@ dashdash@^1.12.0: data-uri-to-buffer@^4.0.0: version "4.0.1" - resolved "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz" + resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz#d8feb2b2881e6a4f58c2e08acfd0e2834e26222e" integrity sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A== date-fns-tz@^1.1.4: @@ -3845,7 +3888,7 @@ debounce@^1.2.1: debug@^3.2.7: version "3.2.7" - resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== dependencies: ms "^2.1.1" @@ -3859,7 +3902,7 @@ debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4: decamelize-keys@^1.1.0: version "1.1.1" - resolved "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz" + resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.1.tgz#04a2d523b2f18d80d0158a43b895d56dff8d19d8" integrity sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg== dependencies: decamelize "^1.1.0" @@ -3897,10 +3940,10 @@ deepmerge@^4.2.2, deepmerge@^4.3.1: resolved "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz" integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== -define-properties@^1.1.3, define-properties@^1.1.4: - version "1.1.4" - resolved "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz" - integrity sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA== +define-properties@^1.1.3, define-properties@^1.1.4, define-properties@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.0.tgz#52988570670c9eacedd8064f4a990f2405849bd5" + integrity sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA== dependencies: has-property-descriptors "^1.0.0" object-keys "^1.1.1" @@ -3968,10 +4011,10 @@ detect-indent@^6.0.0: resolved "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz" integrity sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA== -detect-libc@^2.0.0, detect-libc@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.1.tgz#e1897aa88fa6ad197862937fbc0441ef352ee0cd" - integrity sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w== +detect-libc@^2.0.0, detect-libc@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.2.tgz#8ccf2ba9315350e1241b88d0ac3b0e1fbd99605d" + integrity sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw== diff@^4.0.1: version "4.0.2" @@ -3987,7 +4030,7 @@ dir-glob@^3.0.1: doctrine@^2.1.0: version "2.1.0" - resolved "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== dependencies: esutils "^2.0.2" @@ -4081,7 +4124,7 @@ electron-to-chromium@^1.4.431: emoji-regex@^8.0.0: version "8.0.0" - resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== emoji-regex@^9.2.2: @@ -4120,12 +4163,57 @@ entities@^4.4.0: error-ex@^1.3.1: version "1.3.2" - resolved "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== dependencies: is-arrayish "^0.2.1" -es-abstract@^1.19.0, es-abstract@^1.19.1, es-abstract@^1.20.4: +es-abstract@^1.19.0, es-abstract@^1.20.4, es-abstract@^1.21.2: + version "1.22.1" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.1.tgz#8b4e5fc5cefd7f1660f0f8e1a52900dfbc9d9ccc" + integrity sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw== + dependencies: + array-buffer-byte-length "^1.0.0" + arraybuffer.prototype.slice "^1.0.1" + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + es-set-tostringtag "^2.0.1" + es-to-primitive "^1.2.1" + function.prototype.name "^1.1.5" + get-intrinsic "^1.2.1" + get-symbol-description "^1.0.0" + globalthis "^1.0.3" + gopd "^1.0.1" + has "^1.0.3" + has-property-descriptors "^1.0.0" + has-proto "^1.0.1" + has-symbols "^1.0.3" + internal-slot "^1.0.5" + is-array-buffer "^3.0.2" + is-callable "^1.2.7" + is-negative-zero "^2.0.2" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.2" + is-string "^1.0.7" + is-typed-array "^1.1.10" + is-weakref "^1.0.2" + object-inspect "^1.12.3" + object-keys "^1.1.1" + object.assign "^4.1.4" + regexp.prototype.flags "^1.5.0" + safe-array-concat "^1.0.0" + safe-regex-test "^1.0.0" + string.prototype.trim "^1.2.7" + string.prototype.trimend "^1.0.6" + string.prototype.trimstart "^1.0.6" + typed-array-buffer "^1.0.0" + typed-array-byte-length "^1.0.0" + typed-array-byte-offset "^1.0.0" + typed-array-length "^1.0.4" + unbox-primitive "^1.0.2" + which-typed-array "^1.1.10" + +es-abstract@^1.19.1: version "1.21.1" resolved "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.1.tgz" integrity sha512-QudMsPOz86xYz/1dG1OuGBKOELjCh99IIWHLzy5znUB6j8xG2yMA7bfTV86VSqKF+Y/H08vQPR+9jyXpuC6hfg== @@ -4171,7 +4259,7 @@ es-module-lexer@^1.0.5: es-set-tostringtag@^2.0.1: version "2.0.1" - resolved "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz#338d502f6f674301d710b80c8592de8a15f09cd8" integrity sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg== dependencies: get-intrinsic "^1.1.3" @@ -4180,14 +4268,14 @@ es-set-tostringtag@^2.0.1: es-shim-unscopables@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz#702e632193201e3edf8713635d083d378e510241" integrity sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w== dependencies: has "^1.0.3" es-to-primitive@^1.2.1: version "1.2.1" - resolved "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== dependencies: is-callable "^1.1.4" @@ -4229,7 +4317,7 @@ escalade@^3.1.1: escape-string-regexp@^1.0.5: version "1.0.5" - resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== escape-string-regexp@^4.0.0: @@ -4253,9 +4341,9 @@ eslint-config-next@^12.2.4: eslint-plugin-react-hooks "^4.5.0" eslint-config-prettier@^8.5.0: - version "8.8.0" - resolved "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.8.0.tgz" - integrity sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA== + version "8.9.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.9.0.tgz#094b6254b2804b0544f7cee535f802b6d29ee10b" + integrity sha512-+sbni7NfVXnOpnRadUA8S28AUlsZt9GjgFvABIRL9Hkn8KqNzOp+7Lw4QWtrwn20KzU3wqu1QoOj2m+7rKRqkA== eslint-import-resolver-alias@^1.1.2: version "1.1.2" @@ -4282,33 +4370,36 @@ eslint-import-resolver-typescript@^2.7.1: resolve "^1.22.0" tsconfig-paths "^3.14.1" -eslint-module-utils@^2.7.4: - version "2.7.4" - resolved "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz" - integrity sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA== +eslint-module-utils@^2.8.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz#e439fee65fc33f6bba630ff621efc38ec0375c49" + integrity sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw== dependencies: debug "^3.2.7" eslint-plugin-import@^2.26.0: - version "2.27.5" - resolved "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz" - integrity sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow== + version "2.28.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.28.0.tgz#8d66d6925117b06c4018d491ae84469eb3cb1005" + integrity sha512-B8s/n+ZluN7sxj9eUf7/pRFERX0r5bnFA2dCaLHy2ZeaQEAz0k+ZZkFWRFHJAqxfxQDx6KLv9LeIki7cFdwW+Q== dependencies: array-includes "^3.1.6" + array.prototype.findlastindex "^1.2.2" array.prototype.flat "^1.3.1" array.prototype.flatmap "^1.3.1" debug "^3.2.7" doctrine "^2.1.0" eslint-import-resolver-node "^0.3.7" - eslint-module-utils "^2.7.4" + eslint-module-utils "^2.8.0" has "^1.0.3" - is-core-module "^2.11.0" + is-core-module "^2.12.1" is-glob "^4.0.3" minimatch "^3.1.2" + object.fromentries "^2.0.6" + object.groupby "^1.0.0" object.values "^1.1.6" - resolve "^1.22.1" - semver "^6.3.0" - tsconfig-paths "^3.14.1" + resolve "^1.22.3" + semver "^6.3.1" + tsconfig-paths "^3.14.2" eslint-plugin-jsx-a11y@^6.5.1: version "6.6.1" @@ -4370,40 +4461,40 @@ eslint-scope@^5.1.1: esrecurse "^4.3.0" estraverse "^4.1.1" -eslint-scope@^7.2.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.0.tgz#f21ebdafda02352f103634b96dd47d9f81ca117b" - integrity sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw== +eslint-scope@^7.2.2: + version "7.2.2" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f" + integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== dependencies: esrecurse "^4.3.0" estraverse "^5.2.0" -eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1: - version "3.4.1" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz#c22c48f48942d08ca824cc526211ae400478a994" - integrity sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA== +eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.2: + version "3.4.2" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.2.tgz#8c2095440eca8c933bedcadf16fefa44dbe9ba5f" + integrity sha512-8drBzUEyZ2llkpCA67iYrgEssKDUu68V8ChqqOfFupIaG/LCVPUT+CoGJpT77zJprs4T/W7p07LP7zAIMuweVw== eslint@^8.33.0: - version "8.44.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.44.0.tgz#51246e3889b259bbcd1d7d736a0c10add4f0e500" - integrity sha512-0wpHoUbDUHgNCyvFB5aXLiQVfK9B0at6gUvzy83k4kAsQ/u769TQDX6iKC+aO4upIHO9WSaA3QoXYQDHbNwf1A== + version "8.46.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.46.0.tgz#a06a0ff6974e53e643acc42d1dcf2e7f797b3552" + integrity sha512-cIO74PvbW0qU8e0mIvk5IV3ToWdCq5FYG6gWPHHkx6gNdjlbAYvtfHmlCMXxjcoVaIdwy/IAt3+mDkZkfvb2Dg== dependencies: "@eslint-community/eslint-utils" "^4.2.0" - "@eslint-community/regexpp" "^4.4.0" - "@eslint/eslintrc" "^2.1.0" - "@eslint/js" "8.44.0" + "@eslint-community/regexpp" "^4.6.1" + "@eslint/eslintrc" "^2.1.1" + "@eslint/js" "^8.46.0" "@humanwhocodes/config-array" "^0.11.10" "@humanwhocodes/module-importer" "^1.0.1" "@nodelib/fs.walk" "^1.2.8" - ajv "^6.10.0" + ajv "^6.12.4" chalk "^4.0.0" cross-spawn "^7.0.2" debug "^4.3.2" doctrine "^3.0.0" escape-string-regexp "^4.0.0" - eslint-scope "^7.2.0" - eslint-visitor-keys "^3.4.1" - espree "^9.6.0" + eslint-scope "^7.2.2" + eslint-visitor-keys "^3.4.2" + espree "^9.6.1" esquery "^1.4.2" esutils "^2.0.2" fast-deep-equal "^3.1.3" @@ -4413,7 +4504,6 @@ eslint@^8.33.0: globals "^13.19.0" graphemer "^1.4.0" ignore "^5.2.0" - import-fresh "^3.0.0" imurmurhash "^0.1.4" is-glob "^4.0.0" is-path-inside "^3.0.3" @@ -4425,13 +4515,12 @@ eslint@^8.33.0: natural-compare "^1.4.0" optionator "^0.9.3" strip-ansi "^6.0.1" - strip-json-comments "^3.1.0" text-table "^0.2.0" -espree@^9.6.0: - version "9.6.0" - resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.0.tgz#80869754b1c6560f32e3b6929194a3fe07c5b82f" - integrity sha512-1FH/IiruXZ84tpUlm0aCUEwMl2Ho5ilqVh0VvQXw+byAz/4SAciyHLlfmL5WYqsvD38oymdUwBss0LtK8m4s/A== +espree@^9.6.0, espree@^9.6.1: + version "9.6.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f" + integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== dependencies: acorn "^8.9.0" acorn-jsx "^5.3.2" @@ -4463,7 +4552,7 @@ estraverse@^4.1.1: estraverse@^5.1.0, estraverse@^5.2.0, estraverse@^5.3.0: version "5.3.0" - resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== estree-walker@^0.6.1: @@ -4567,6 +4656,11 @@ fast-equals@^3.0.1: resolved "https://registry.yarnpkg.com/fast-equals/-/fast-equals-3.0.3.tgz#8e6cb4e51ca1018d87dd41982ef92758b3e4197f" integrity sha512-NCe8qxnZFARSHGztGMZOO/PC1qa5MIFB5Hp66WdzbCRAz8U8US3bx1UTgLS49efBQPcUtO9gf5oVEY8o7y/7Kg== +fast-fifo@^1.1.0, fast-fifo@^1.2.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/fast-fifo/-/fast-fifo-1.3.0.tgz#03e381bcbfb29932d7c3afde6e15e83e05ab4d8b" + integrity sha512-IgfweLvEpwyA4WgiQe9Nx6VV2QkML2NkvZnk1oKnIzXgXdWxuhF7zw4DvLTPZJn6PIUneiAXPF24QmoEqHTjyw== + fast-glob@^3.0.3, fast-glob@^3.2.7: version "3.2.12" resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz" @@ -4579,9 +4673,9 @@ fast-glob@^3.0.3, fast-glob@^3.2.7: micromatch "^4.0.4" fast-glob@^3.2.9, fast-glob@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.0.tgz#7c40cb491e1e2ed5664749e87bfb516dbe8727c0" - integrity sha512-ChDuvbOypPuNjO8yIDf36x7BlZX1smcUMTTcyoIjycexOxd6DFsKsg21qVBzEmr3G7fUKIRy2/psii+CIUt7FA== + version "3.3.1" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.1.tgz#784b4e897340f3dbbef17413b3f11acf03c874c4" + integrity sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg== dependencies: "@nodelib/fs.stat" "^2.0.2" "@nodelib/fs.walk" "^1.2.3" @@ -4601,7 +4695,7 @@ fast-levenshtein@^2.0.6: fastest-levenshtein@^1.0.16: version "1.0.16" - resolved "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz" + resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz#210e61b6ff181de91ea9b3d1b84fdedd47e034e5" integrity sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg== fastq@^1.6.0: @@ -4613,7 +4707,7 @@ fastq@^1.6.0: fetch-blob@^3.1.2, fetch-blob@^3.1.4: version "3.2.0" - resolved "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz" + resolved "https://registry.yarnpkg.com/fetch-blob/-/fetch-blob-3.2.0.tgz#f09b8d4bbd45adc6f0c20b7e787e793e309dcce9" integrity sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ== dependencies: node-domexception "^1.0.0" @@ -4674,7 +4768,7 @@ follow-redirects@^1.15.2: for-each@^0.3.3: version "0.3.3" - resolved "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz" + resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== dependencies: is-callable "^1.1.3" @@ -4695,7 +4789,7 @@ form-data@~2.3.2: formdata-polyfill@^4.0.10: version "4.0.10" - resolved "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz" + resolved "https://registry.yarnpkg.com/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz#24807c31c9d402e002ab3d8c720144ceb8848423" integrity sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g== dependencies: fetch-blob "^3.1.2" @@ -4757,12 +4851,12 @@ fsevents@~2.3.2: function-bind@^1.1.1: version "1.1.1" - resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== function.prototype.name@^1.1.5: version "1.1.5" - resolved "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621" integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA== dependencies: call-bind "^1.0.2" @@ -4770,9 +4864,9 @@ function.prototype.name@^1.1.5: es-abstract "^1.19.0" functions-have-names "^1.2.2" -functions-have-names@^1.2.2: +functions-have-names@^1.2.2, functions-have-names@^1.2.3: version "1.2.3" - resolved "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz" + resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== generic-names@^4.0.0: @@ -4792,13 +4886,14 @@ gensync@^1.0.0-beta.2: resolved "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz" integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== -get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3: - version "1.1.3" - resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz" - integrity sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A== +get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0, get-intrinsic@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.1.tgz#d295644fed4505fc9cde952c37ee12b477a83d82" + integrity sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw== dependencies: function-bind "^1.1.1" has "^1.0.3" + has-proto "^1.0.1" has-symbols "^1.0.3" get-own-enumerable-property-symbols@^3.0.0: @@ -4818,7 +4913,7 @@ get-stream@^6.0.0: get-symbol-description@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== dependencies: call-bind "^1.0.2" @@ -4887,14 +4982,14 @@ glob@^8.0.3: global-modules@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780" integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A== dependencies: global-prefix "^3.0.0" global-prefix@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-3.0.0.tgz#fc85f73064df69f50421f47f883fe5b913ba9b97" integrity sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg== dependencies: ini "^1.3.5" @@ -4915,7 +5010,7 @@ globals@^13.19.0: globalthis@^1.0.3: version "1.0.3" - resolved "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz" + resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf" integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA== dependencies: define-properties "^1.1.3" @@ -4953,7 +5048,7 @@ globby@^11.0.1, globby@^11.0.4, globby@^11.1.0: globjoin@^0.1.4: version "0.1.4" - resolved "https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz" + resolved "https://registry.yarnpkg.com/globjoin/-/globjoin-0.1.4.tgz#2f4494ac8919e3767c5cbb691e9f463324285d43" integrity sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg== globrex@^0.1.2: @@ -4963,7 +5058,7 @@ globrex@^0.1.2: gopd@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== dependencies: get-intrinsic "^1.1.3" @@ -5006,17 +5101,17 @@ har-validator@~5.1.0: hard-rejection@^2.1.0: version "2.1.0" - resolved "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz" + resolved "https://registry.yarnpkg.com/hard-rejection/-/hard-rejection-2.1.0.tgz#1c6eda5c1685c63942766d79bb40ae773cecd883" integrity sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA== has-bigints@^1.0.1, has-bigints@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz" + resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== has-flag@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== has-flag@^4.0.0: @@ -5026,31 +5121,31 @@ has-flag@^4.0.0: has-property-descriptors@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== dependencies: get-intrinsic "^1.1.1" has-proto@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== has-symbols@^1.0.2, has-symbols@^1.0.3: version "1.0.3" - resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== has-tostringtag@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== dependencies: has-symbols "^1.0.2" has@^1.0.3: version "1.0.3" - resolved "https://registry.npmjs.org/has/-/has-1.0.3.tgz" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== dependencies: function-bind "^1.1.1" @@ -5069,7 +5164,7 @@ hosted-git-info@^2.1.4: hosted-git-info@^4.0.1: version "4.1.0" - resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-4.1.0.tgz#827b82867e9ff1c8d0c4d9d53880397d2c86d224" integrity sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA== dependencies: lru-cache "^6.0.0" @@ -5140,7 +5235,7 @@ import-cwd@^3.0.0: dependencies: import-from "^3.0.0" -import-fresh@^3.0.0, import-fresh@^3.2.1: +import-fresh@^3.2.1: version "3.3.0" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== @@ -5157,7 +5252,7 @@ import-from@^3.0.0: import-lazy@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-4.0.0.tgz#e8eb627483a0a43da3c03f3e35548be5cb0cc153" integrity sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw== imurmurhash@^0.1.4: @@ -5190,10 +5285,10 @@ inherits@2, inherits@^2.0.3, inherits@^2.0.4: ini@^1.3.5, ini@~1.3.0: version "1.3.8" - resolved "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== -internal-slot@^1.0.3, internal-slot@^1.0.4: +internal-slot@^1.0.3: version "1.0.4" resolved "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.4.tgz" integrity sha512-tA8URYccNzMo94s5MQZgH8NB/XTa6HsOo0MLfXTKKEnHVVdegzaQoFZ7Jp44bdvLvY2waT5dc+j5ICEswhi7UQ== @@ -5202,6 +5297,15 @@ internal-slot@^1.0.3, internal-slot@^1.0.4: has "^1.0.3" side-channel "^1.0.4" +internal-slot@^1.0.4, internal-slot@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.5.tgz#f2a2ee21f668f8627a4667f309dc0f4fb6674986" + integrity sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ== + dependencies: + get-intrinsic "^1.2.0" + has "^1.0.3" + side-channel "^1.0.4" + internmap@^1.0.0: version "1.0.1" resolved "https://registry.npmjs.org/internmap/-/internmap-1.0.1.tgz" @@ -5247,11 +5351,6 @@ ioredis@^5.3.2: redis-parser "^3.0.0" standard-as-callback "^2.1.0" -ip-regex@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-5.0.0.tgz#cd313b2ae9c80c07bd3851e12bf4fa4dc5480632" - integrity sha512-fOCG6lhoKKakwv+C6KdsOnGvgXnmgfmp0myi3bcNwj3qfwPAxRKWEuFhvEFF7ceYIz6+1jRZ+yguLFAmUNPEfw== - ipaddr.js@^2.0.1: version "2.1.0" resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-2.1.0.tgz#2119bc447ff8c257753b196fc5f1ce08a4cdf39f" @@ -5280,18 +5379,18 @@ iron-webcrypto@^0.7.0: resolved "https://registry.yarnpkg.com/iron-webcrypto/-/iron-webcrypto-0.7.1.tgz#7323e1f32fbc5d3e1f25a228fdbf0bcde3c276c6" integrity sha512-K/UmlEhPCPXEHV5hAtH5C0tI5JnFuOrv4yO/j7ODPl3HaiiHBLbOLTde+ieUaAyfCATe4LoAnclyF+hmSCOVmQ== -is-array-buffer@^3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.1.tgz" - integrity sha512-ASfLknmY8Xa2XtB4wmbz13Wu202baeA18cJBCeCy0wXUHZF0IPyVEXqKEcd+t2fNSLLL1vC6k7lxZEojNbISXQ== +is-array-buffer@^3.0.1, is-array-buffer@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.2.tgz#f2653ced8412081638ecb0ebbd0c41c6e0aecbbe" + integrity sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w== dependencies: call-bind "^1.0.2" - get-intrinsic "^1.1.3" + get-intrinsic "^1.2.0" is-typed-array "^1.1.10" is-arrayish@^0.2.1: version "0.2.1" - resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== is-arrayish@^0.3.1: @@ -5301,7 +5400,7 @@ is-arrayish@^0.3.1: is-bigint@^1.0.1: version "1.0.4" - resolved "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz" + resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== dependencies: has-bigints "^1.0.1" @@ -5315,7 +5414,7 @@ is-binary-path@~2.1.0: is-boolean-object@^1.1.0: version "1.1.2" - resolved "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== dependencies: call-bind "^1.0.2" @@ -5330,7 +5429,7 @@ is-builtin-module@^3.2.1: is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: version "1.2.7" - resolved "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== is-ci@^3.0.1: @@ -5340,23 +5439,16 @@ is-ci@^3.0.1: dependencies: ci-info "^3.2.0" -is-core-module@^2.11.0, is-core-module@^2.5.0: - version "2.11.0" - resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz" - integrity sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw== - dependencies: - has "^1.0.3" - -is-core-module@^2.9.0: +is-core-module@^2.11.0, is-core-module@^2.12.0, is-core-module@^2.12.1, is-core-module@^2.5.0, is-core-module@^2.9.0: version "2.12.1" - resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.12.1.tgz#0c0b6885b6f80011c71541ce15c8d66cf5a4f9fd" integrity sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg== dependencies: has "^1.0.3" is-date-object@^1.0.1: version "1.0.5" - resolved "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== dependencies: has-tostringtag "^1.0.0" @@ -5378,7 +5470,7 @@ is-extglob@^2.1.1: is-fullwidth-code-point@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: @@ -5400,12 +5492,12 @@ is-module@^1.0.0: is-negative-zero@^2.0.2: version "2.0.2" - resolved "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== is-number-object@^1.0.4: version "1.0.7" - resolved "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== dependencies: has-tostringtag "^1.0.0" @@ -5432,7 +5524,7 @@ is-path-inside@^3.0.1, is-path-inside@^3.0.2, is-path-inside@^3.0.3: is-plain-obj@^1.1.0: version "1.1.0" - resolved "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" integrity sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg== is-plain-obj@^2.0.0: @@ -5442,7 +5534,7 @@ is-plain-obj@^2.0.0: is-plain-object@^5.0.0: version "5.0.0" - resolved "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344" integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== is-promise@^4.0.0: @@ -5459,7 +5551,7 @@ is-reference@1.2.1: is-regex@^1.1.4: version "1.1.4" - resolved "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== dependencies: call-bind "^1.0.2" @@ -5472,7 +5564,7 @@ is-regexp@^1.0.0: is-shared-array-buffer@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz" + resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== dependencies: call-bind "^1.0.2" @@ -5484,28 +5576,24 @@ is-stream@^2.0.0: is-string@^1.0.5, is-string@^1.0.7: version "1.0.7" - resolved "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== dependencies: has-tostringtag "^1.0.0" is-symbol@^1.0.2, is-symbol@^1.0.3: version "1.0.4" - resolved "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== dependencies: has-symbols "^1.0.2" is-typed-array@^1.1.10, is-typed-array@^1.1.9: - version "1.1.10" - resolved "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz" - integrity sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A== + version "1.1.12" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.12.tgz#d0bab5686ef4a76f7a73097b95470ab199c57d4a" + integrity sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg== dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" - for-each "^0.3.3" - gopd "^1.0.1" - has-tostringtag "^1.0.0" + which-typed-array "^1.1.11" is-typedarray@^1.0.0, is-typedarray@~1.0.0: version "1.0.0" @@ -5514,7 +5602,7 @@ is-typedarray@^1.0.0, is-typedarray@~1.0.0: is-weakref@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz" + resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== dependencies: call-bind "^1.0.2" @@ -5526,10 +5614,15 @@ is-wsl@^2.2.0: dependencies: is-docker "^2.0.0" +isarray@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" + integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== + isbot@^3.4.5: - version "3.6.12" - resolved "https://registry.yarnpkg.com/isbot/-/isbot-3.6.12.tgz#db01e46fe669d821a7583f067f2b43356f5c50c2" - integrity sha512-dGc3jRIORywaaqs4G5wj+58i5/l1eoI75q7XNiyW9Sgfoyr3QkyDZUXw+cuB7AOFq/0aruCQrGLrnKJlQarP/g== + version "3.6.13" + resolved "https://registry.yarnpkg.com/isbot/-/isbot-3.6.13.tgz#e060f727cb53475a4dab1569321ced0f84633d63" + integrity sha512-uoP4uK5Dc2CrabmK+Gue1jTL+scHiCc1c9rblRpJwG8CPxjLIv8jmGyyGRGkbPOweayhkskdZsEQXG6p+QCQrg== isexe@^2.0.0: version "2.0.0" @@ -5550,6 +5643,11 @@ jest-worker@^26.2.1: merge-stream "^2.0.0" supports-color "^7.0.0" +jiti@^1.19.1: + version "1.19.1" + resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.19.1.tgz#fa99e4b76a23053e0e7cde098efe1704a14c16f1" + integrity sha512-oVhqoRDaBXf7sjkll95LHVS6Myyyb1zaunVwk4Z0+WPSW4gjS0pl01zYKHScTuyEhQsFxV5L4DR5r+YqSyqyyg== + joycon@^3.1.1: version "3.1.1" resolved "https://registry.npmjs.org/joycon/-/joycon-3.1.1.tgz" @@ -5597,7 +5695,7 @@ json-parse-better-errors@^1.0.1: json-parse-even-better-errors@^2.3.0: version "2.3.1" - resolved "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== json-schema-traverse@^0.4.1: @@ -5607,7 +5705,7 @@ json-schema-traverse@^0.4.1: json-schema-traverse@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== json-schema@0.4.0: @@ -5632,9 +5730,9 @@ json-stringify-safe@~5.0.1: resolved "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz" integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== -json5@^1.0.1: +json5@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== dependencies: minimist "^1.2.0" @@ -5725,7 +5823,7 @@ kafkajs@^2.1.0: kind-of@^6.0.2, kind-of@^6.0.3: version "6.0.3" - resolved "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== kleur@^3.0.3: @@ -5765,7 +5863,7 @@ lilconfig@^2.0.3, lilconfig@^2.0.5: lines-and-columns@^1.1.6: version "1.2.4" - resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== lint-staged@^11.0.0: @@ -5789,18 +5887,21 @@ lint-staged@^11.0.0: supports-color "8.1.1" listhen@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/listhen/-/listhen-1.0.4.tgz#29a177da59322a7ebdf88768d13d2e555e8fc43e" - integrity sha512-r94k7kmXHb8e8wpv7+UP/qqhhD+j/9TgX19QKim2cEJuWCLwlTw+5BkCFmYyjhQ7Bt8KdVun/2DcD7MF2Fe3+g== + version "1.1.2" + resolved "https://registry.yarnpkg.com/listhen/-/listhen-1.1.2.tgz#c95082b0fdbd50d73abeab748893768dbefa7db8" + integrity sha512-rLX5V57oonazmc6zoZ2LzfbSOfGzDOLdQ/eTEh/d3f1xYMACH1yIU8nr0YGl2WiR+l31o3QCN4/VH2dUNyYvTA== dependencies: + citty "^0.1.2" clipboardy "^3.0.0" - colorette "^2.0.19" + consola "^3.2.3" defu "^6.1.2" get-port-please "^3.0.1" http-shutdown "^1.2.2" - ip-regex "^5.0.0" + jiti "^1.19.1" + mlly "^1.4.0" node-forge "^1.3.1" - ufo "^1.1.1" + pathe "^1.1.1" + ufo "^1.1.2" listr2@^3.12.2: version "3.14.0" @@ -5902,7 +6003,7 @@ lodash.pick@^4.4.0: lodash.truncate@^4.4.2: version "4.4.2" - resolved "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz" + resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" integrity sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw== lodash.uniq@^4.5.0: @@ -5994,7 +6095,7 @@ make-error@^1.1.1: map-obj@^1.0.0: version "1.0.1" - resolved "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" integrity sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg== map-obj@^4.0.0, map-obj@^4.1.0: @@ -6004,7 +6105,7 @@ map-obj@^4.0.0, map-obj@^4.1.0: mathml-tag-names@^2.1.3: version "2.1.3" - resolved "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz" + resolved "https://registry.yarnpkg.com/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz#4ddadd67308e780cf16a47685878ee27b736a0a3" integrity sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg== maxmind@^4.3.6: @@ -6027,7 +6128,7 @@ mdn-data@2.0.28: mdn-data@2.0.30: version "2.0.30" - resolved "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz" + resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.30.tgz#ce4df6f80af6cfbe218ecd5c552ba13c4dfa08cc" integrity sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA== "memoize-one@>=3.1.1 <6", memoize-one@^5.1.1: @@ -6183,6 +6284,16 @@ mkdirp@^1.0.3, mkdirp@^1.0.4: resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== +mlly@^1.2.0, mlly@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/mlly/-/mlly-1.4.0.tgz#830c10d63f1f97bd8785377b24dc2a15d972832b" + integrity sha512-ua8PAThnTwpprIaU47EPeZ/bPUVp2QYBbWMphUQpVdBI3Lgqzm5KZQ45Agm3YJedHXaIHl6pBGabaLSUPPSptg== + dependencies: + acorn "^8.9.0" + pathe "^1.1.1" + pkg-types "^1.0.3" + ufo "^1.1.2" + mmdb-lib@2.0.2: version "2.0.2" resolved "https://registry.npmjs.org/mmdb-lib/-/mmdb-lib-2.0.2.tgz" @@ -6227,7 +6338,7 @@ ms@2.1.2: ms@^2.1.1: version "2.1.3" - resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== murmurhash@^2.0.0: @@ -6260,10 +6371,10 @@ natural-compare@^1.4.0: resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== -next-basics@^0.31.0: - version "0.31.0" - resolved "https://registry.npmjs.org/next-basics/-/next-basics-0.31.0.tgz" - integrity sha512-uAum7v4DQ37IdqKdmLTFLMyN+ir7FNMeMHQcTd1RQ14sm/fO/tntadlsXulwj/A5xs3gmnW/gfGkLX7VnNjreg== +next-basics@^0.35.0: + version "0.35.0" + resolved "https://registry.yarnpkg.com/next-basics/-/next-basics-0.35.0.tgz#aa68fd35a0e3fbabfdaf570cd092b6a7cf8df6f5" + integrity sha512-yqXZMLe109hSJ8sebI/f2m1XNnVuQowpELOhZSGOFOmLfvUyFBAEi0ULdqX1eb8xbttLgjcrumrZfMgmEwuCPw== dependencies: bcryptjs "^2.4.3" jsonwebtoken "^9.0.0" @@ -6310,7 +6421,7 @@ node-addon-api@^6.1.0: node-domexception@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/node-domexception/-/node-domexception-1.0.0.tgz#6888db46a1f71c0b76b3f7555016b63fe64766e5" integrity sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ== node-fetch-native@^1.1.1, node-fetch-native@^1.2.0: @@ -6326,9 +6437,9 @@ node-fetch@^2.0.0, node-fetch@^2.6.6: whatwg-url "^5.0.0" node-fetch@^3.2.8: - version "3.3.1" - resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.1.tgz" - integrity sha512-cRVc/kyto/7E5shrWca1Wsea4y6tL9iYJE5FBCius3JQfb/4P4I295PfhgbJQBLTx6lATE4z+wK0rPM4VS2uow== + version "3.3.2" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-3.3.2.tgz#d1e889bacdf733b4ff3b2b243eb7a12866a0b78b" + integrity sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA== dependencies: data-uri-to-buffer "^4.0.0" fetch-blob "^3.1.4" @@ -6423,19 +6534,19 @@ object-assign@^4, object-assign@^4.1.1: resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= -object-inspect@^1.12.2, object-inspect@^1.9.0: +object-inspect@^1.12.2, object-inspect@^1.12.3, object-inspect@^1.9.0: version "1.12.3" - resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== object-keys@^1.1.1: version "1.1.1" - resolved "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== object.assign@^4.1.3, object.assign@^4.1.4: version "4.1.4" - resolved "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== dependencies: call-bind "^1.0.2" @@ -6461,6 +6572,16 @@ object.fromentries@^2.0.6: define-properties "^1.1.4" es-abstract "^1.20.4" +object.groupby@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.0.tgz#cb29259cf90f37e7bac6437686c1ea8c916d12a9" + integrity sha512-70MWG6NfRH9GnbZOikuhPPYzpUpof9iW2J9E4dW7FXTqPNb6rllE6u39SKwwiNh8lCwX3DDb5OgcKGiEBrTTyw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.21.2" + get-intrinsic "^1.2.1" + object.hasown@^1.1.2: version "1.1.2" resolved "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.2.tgz" @@ -6471,7 +6592,7 @@ object.hasown@^1.1.2: object.values@^1.1.6: version "1.1.6" - resolved "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.6.tgz#4abbaa71eba47d63589d402856f908243eea9b1d" integrity sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw== dependencies: call-bind "^1.0.2" @@ -6602,7 +6723,7 @@ parse-json@^4.0.0: parse-json@^5.0.0, parse-json@^5.2.0: version "5.2.0" - resolved "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== dependencies: "@babel/code-frame" "^7.0.0" @@ -6632,7 +6753,7 @@ path-key@^3.0.0, path-key@^3.1.0: path-parse@^1.0.7: version "1.0.7" - resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== path-type@^3.0.0: @@ -6652,7 +6773,7 @@ pathe@^0.3.0: resolved "https://registry.yarnpkg.com/pathe/-/pathe-0.3.9.tgz#4baff768f37f03e3d9341502865fb93116f65191" integrity sha512-6Y6s0vT112P3jD8dGfuS6r+lpa0qqNrLyHPOwvXMnyNTQaYiwgau2DP3aNDsR13xqtGj7rrPo+jFUATpU6/s+g== -pathe@^1.1.1: +pathe@^1.1.0, pathe@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/pathe/-/pathe-1.1.1.tgz#1dd31d382b974ba69809adc9a7a347e65d84829a" integrity sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q== @@ -6692,6 +6813,15 @@ pify@^5.0.0: resolved "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz" integrity sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA== +pkg-types@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/pkg-types/-/pkg-types-1.0.3.tgz#988b42ab19254c01614d13f4f65a2cfc7880f868" + integrity sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A== + dependencies: + jsonc-parser "^3.2.0" + mlly "^1.2.0" + pathe "^1.1.0" + please-upgrade-node@^3.2.0: version "3.2.0" resolved "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz" @@ -6901,7 +7031,7 @@ postcss-media-minmax@^5.0.0: postcss-media-query-parser@^0.2.3: version "0.2.3" - resolved "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz" + resolved "https://registry.yarnpkg.com/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz#27b39c6f4d94f81b1a73b8f76351c609e5cef244" integrity sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig== postcss-merge-longhand@^5.1.7: @@ -7183,7 +7313,7 @@ postcss-replace-overflow-wrap@^4.0.0: postcss-resolve-nested-selector@^0.1.1: version "0.1.1" - resolved "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz" + resolved "https://registry.yarnpkg.com/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz#29ccbc7c37dedfac304e9fff0bf1596b3f6a0e4e" integrity sha512-HvExULSwLqHLgUy1rl3ANIqCsvMS0WHss2UOsXhXnQaZ9VCc2oBvIpXrl00IUFT5ZDITME0o6oiXeiHr2SAIfw== postcss-rtlcss@^4.0.1: @@ -7195,7 +7325,7 @@ postcss-rtlcss@^4.0.1: postcss-safe-parser@^6.0.0: version "6.0.0" - resolved "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz" + resolved "https://registry.yarnpkg.com/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz#bb4c29894171a94bc5c996b9a30317ef402adaa1" integrity sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ== postcss-selector-not@^6.0.1: @@ -7205,7 +7335,7 @@ postcss-selector-not@^6.0.1: dependencies: postcss-selector-parser "^6.0.10" -postcss-selector-parser@^6.0.10, postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4, postcss-selector-parser@^6.0.5, postcss-selector-parser@^6.0.6, postcss-selector-parser@^6.0.9: +postcss-selector-parser@^6.0.10, postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4, postcss-selector-parser@^6.0.5, postcss-selector-parser@^6.0.9: version "6.0.11" resolved "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz" integrity sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g== @@ -7259,10 +7389,10 @@ postcss@^8.1.10: picocolors "^1.0.0" source-map-js "^1.0.2" -postcss@^8.4.21, postcss@^8.4.24: - version "8.4.25" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.25.tgz#4a133f5e379eda7f61e906c3b1aaa9b81292726f" - integrity sha512-7taJ/8t2av0Z+sQEvNzCkpDynl0tX3uJMCODi6nT3PfASC7dYCWV9aQ+uiCf+KBD4SEFcu+GvJdGdwzQ6OSjCw== +postcss@^8.4.21, postcss@^8.4.25: + version "8.4.27" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.27.tgz#234d7e4b72e34ba5a92c29636734349e0d9c3057" + integrity sha512-gY/ACJtJPSmUFPDCHtX78+01fHa64FaU4zaaWfuh1MhGJISufJAH4cun6k/8fwsHYeK4UQmENQK+tRLCFJE8JQ== dependencies: nanoid "^3.3.6" picocolors "^1.0.0" @@ -7308,12 +7438,12 @@ pretty-bytes@^5.6.0: resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.6.0.tgz#356256f643804773c82f64723fe78c92c62beaeb" integrity sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg== -prisma@4.15.0: - version "4.15.0" - resolved "https://registry.npmjs.org/prisma/-/prisma-4.15.0.tgz" - integrity sha512-iKZZpobPl48gTcSZVawLMQ3lEy6BnXwtoMj7hluoGFYu2kQ6F9LBuBrUyF95zRVnNo8/3KzLXJXJ5TEnLSJFiA== +prisma@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/prisma/-/prisma-5.0.0.tgz#f6571c46dc2478172cb7bc1bb62d74026a2c2630" + integrity sha512-KYWk83Fhi1FH59jSpavAYTt2eoMVW9YKgu8ci0kuUnt6Dup5Qy47pcB4/TLmiPAbhGrxxSz7gsSnJcCmkyPANA== dependencies: - "@prisma/engines" "4.15.0" + "@prisma/engines" "5.0.0" promise.series@^0.2.0: version "0.2.0" @@ -7385,6 +7515,11 @@ queue-microtask@^1.2.2: resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== +queue-tick@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/queue-tick/-/queue-tick-1.0.1.tgz#f6f07ac82c1fd60f82e098b417a80e52f1f4c142" + integrity sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag== + quick-lru@^4.0.1: version "4.0.1" resolved "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz" @@ -7721,14 +7856,14 @@ regexp-tree@^0.1.24: resolved "https://registry.yarnpkg.com/regexp-tree/-/regexp-tree-0.1.27.tgz#2198f0ef54518ffa743fe74d983b56ffd631b6cd" integrity sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA== -regexp.prototype.flags@^1.4.3: - version "1.4.3" - resolved "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz" - integrity sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA== +regexp.prototype.flags@^1.4.3, regexp.prototype.flags@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz#fe7ce25e7e4cca8db37b6634c8a2c7009199b9cb" + integrity sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA== dependencies: call-bind "^1.0.2" - define-properties "^1.1.3" - functions-have-names "^1.2.2" + define-properties "^1.2.0" + functions-have-names "^1.2.3" regexpu-core@4.5.4: version "4.5.4" @@ -7823,7 +7958,7 @@ request@2.88.0: require-from-string@^2.0.2: version "2.0.2" - resolved "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== resolve-from@^4.0.0: @@ -7833,7 +7968,7 @@ resolve-from@^4.0.0: resolve-from@^5.0.0: version "5.0.0" - resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== resolve@^1.1.7, resolve@^1.10.0, resolve@^1.14.2, resolve@^1.19.0, resolve@^1.22.0, resolve@^1.22.1: @@ -7845,6 +7980,15 @@ resolve@^1.1.7, resolve@^1.10.0, resolve@^1.14.2, resolve@^1.19.0, resolve@^1.22 path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" +resolve@^1.22.3: + version "1.22.3" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.3.tgz#4b4055349ffb962600972da1fdc33c46a4eb3283" + integrity sha512-P8ur/gp/AmbEzjr729bZnLjXK5Z+4P0zhIJgBgzqRih7hL7BOukHGtSTA3ACMY467GRFz3duQsi0bDZdR7DKdw== + dependencies: + is-core-module "^2.12.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + resolve@^2.0.0-next.3: version "2.0.0-next.4" resolved "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz" @@ -7978,6 +8122,16 @@ rxjs@^7.5.1: dependencies: tslib "^2.1.0" +safe-array-concat@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.0.0.tgz#2064223cba3c08d2ee05148eedbc563cd6d84060" + integrity sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.0" + has-symbols "^1.0.3" + isarray "^2.0.5" + safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.2, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" @@ -7990,7 +8144,7 @@ safe-identifier@^0.4.2: safe-regex-test@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295" integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA== dependencies: call-bind "^1.0.2" @@ -8038,25 +8192,30 @@ semver-compare@^1.0.0: resolved "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== -semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: +semver@^6.0.0, semver@^6.1.1, semver@^6.1.2: version "6.3.0" resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== -semver@^7.3.4, semver@^7.3.8: - version "7.5.2" - resolved "https://registry.npmjs.org/semver/-/semver-7.5.2.tgz" - integrity sha512-SoftuTROv/cRjCze/scjGyiDtcUyxw1rgYQSZY7XTmtR5hX+dm76iDbTH8TkLPHCQmlbQVSSbNZCPM2hb0knnQ== - dependencies: - lru-cache "^6.0.0" +semver@^6.3.0, semver@^6.3.1: + version "6.3.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" + integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.3.5, semver@^7.3.7, semver@^7.5.0, semver@^7.5.2: +semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.5.2, semver@^7.5.4: version "7.5.4" resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== dependencies: lru-cache "^6.0.0" +semver@^7.3.8: + version "7.5.2" + resolved "https://registry.npmjs.org/semver/-/semver-7.5.2.tgz" + integrity sha512-SoftuTROv/cRjCze/scjGyiDtcUyxw1rgYQSZY7XTmtR5hX+dm76iDbTH8TkLPHCQmlbQVSSbNZCPM2hb0knnQ== + dependencies: + lru-cache "^6.0.0" + serialize-javascript@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz" @@ -8065,17 +8224,17 @@ serialize-javascript@^4.0.0: randombytes "^2.1.0" sharp@^0.32.1: - version "0.32.1" - resolved "https://registry.yarnpkg.com/sharp/-/sharp-0.32.1.tgz#41aa0d0b2048b2e0ee453d9fcb14ec1f408390fe" - integrity sha512-kQTFtj7ldpUqSe8kDxoGLZc1rnMFU0AO2pqbX6pLy3b7Oj8ivJIdoKNwxHVQG2HN6XpHPJqCSM2nsma2gOXvOg== + version "0.32.4" + resolved "https://registry.yarnpkg.com/sharp/-/sharp-0.32.4.tgz#0354653b7924f2520b2264ac9bcd10a58bf411b6" + integrity sha512-exUnZewqVZC6UXqXuQ8fyJJv0M968feBi04jb9GcUHrWtkRoAKnbJt8IfwT4NJs7FskArbJ14JAFGVuooszoGg== dependencies: color "^4.2.3" - detect-libc "^2.0.1" + detect-libc "^2.0.2" node-addon-api "^6.1.0" prebuild-install "^7.1.1" - semver "^7.5.0" + semver "^7.5.4" simple-get "^4.0.1" - tar-fs "^2.1.1" + tar-fs "^3.0.4" tunnel-agent "^0.6.0" shebang-command@^1.2.0: @@ -8109,7 +8268,7 @@ shell-quote@^1.6.1: side-channel@^1.0.4: version "1.0.4" - resolved "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== dependencies: call-bind "^1.0.0" @@ -8173,7 +8332,7 @@ slice-ansi@^3.0.0: slice-ansi@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== dependencies: ansi-styles "^4.0.0" @@ -8211,30 +8370,30 @@ sourcemap-codec@^1.4.8: integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== spdx-correct@^3.0.0: - version "3.1.1" - resolved "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz" - integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== + version "3.2.0" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.2.0.tgz#4f5ab0668f0059e34f9c00dce331784a12de4e9c" + integrity sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA== dependencies: spdx-expression-parse "^3.0.0" spdx-license-ids "^3.0.0" spdx-exceptions@^2.1.0: version "2.3.0" - resolved "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== spdx-expression-parse@^3.0.0: version "3.0.1" - resolved "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== dependencies: spdx-exceptions "^2.1.0" spdx-license-ids "^3.0.0" spdx-license-ids@^3.0.0: - version "3.0.12" - resolved "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz" - integrity sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA== + version "3.0.13" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz#7189a474c46f8d47c7b0da4b987bb45e908bd2d5" + integrity sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w== sprintf-js@~1.0.2: version "1.0.3" @@ -8276,6 +8435,14 @@ streamsearch@^1.1.0: resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-1.1.0.tgz#404dd1e2247ca94af554e841a8ef0eaa238da764" integrity sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg== +streamx@^2.15.0: + version "2.15.0" + resolved "https://registry.yarnpkg.com/streamx/-/streamx-2.15.0.tgz#f58c92e6f726b5390dcabd6dd9094d29a854d698" + integrity sha512-HcxY6ncGjjklGs1xsP1aR71INYcsXFJet5CU1CHqihQ2J5nOsbd4OjgjHO42w/4QNv9gZb3BueV+Vxok5pLEXg== + dependencies: + fast-fifo "^1.1.0" + queue-tick "^1.0.1" + string-argv@0.3.1: version "0.3.1" resolved "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz" @@ -8318,9 +8485,18 @@ string.prototype.padend@^3.0.0: define-properties "^1.1.3" es-abstract "^1.19.1" +string.prototype.trim@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz#a68352740859f6893f14ce3ef1bb3037f7a90533" + integrity sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + string.prototype.trimend@^1.0.6: version "1.0.6" - resolved "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz#c4a27fa026d979d79c04f17397f250a462944533" integrity sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ== dependencies: call-bind "^1.0.2" @@ -8329,7 +8505,7 @@ string.prototype.trimend@^1.0.6: string.prototype.trimstart@^1.0.6: version "1.0.6" - resolved "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz#e90ab66aa8e4007d92ef591bbf3cd422c56bdcf4" integrity sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA== dependencies: call-bind "^1.0.2" @@ -8361,7 +8537,7 @@ strip-ansi@^6.0.0, strip-ansi@^6.0.1: strip-bom@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== strip-bom@^4.0.0: @@ -8388,7 +8564,7 @@ strip-indent@^4.0.0: dependencies: min-indent "^1.0.1" -strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: +strip-json-comments@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== @@ -8405,7 +8581,7 @@ style-inject@^0.3.0: style-search@^0.1.0: version "0.1.0" - resolved "https://registry.npmjs.org/style-search/-/style-search-0.1.0.tgz" + resolved "https://registry.yarnpkg.com/style-search/-/style-search-0.1.0.tgz#7958c793e47e32e07d2b5cafe5c0bf8e12e77902" integrity sha512-Dj1Okke1C3uKKwQcetra4jSuk0DqbzbYtXipzFlFMZtowbF1x7BKJwB9AayVMyFARvU8EDrZdcax4At/452cAg== styled-jsx@5.1.1: @@ -8424,11 +8600,11 @@ stylehacks@^5.1.1: postcss-selector-parser "^6.0.4" stylelint-config-css-modules@^4.1.0: - version "4.2.0" - resolved "https://registry.npmjs.org/stylelint-config-css-modules/-/stylelint-config-css-modules-4.2.0.tgz" - integrity sha512-5x7lzPNCc42puQEAFdr7dSzQ00aIg1vCVyV+QPUiSp2oZILpAt8HTgveXaDttazxcwWPBNJrxrLpa556xUP7Bw== + version "4.3.0" + resolved "https://registry.yarnpkg.com/stylelint-config-css-modules/-/stylelint-config-css-modules-4.3.0.tgz#aa2a861f9cf30c31676013db5412c15048ca97c3" + integrity sha512-KvIvhzzjpcjHKkGSPkQCueoZJHrb6sZ6GCtrQb/J45HQTBVwJAeNYXaSZZK6ZQOC7NxJ4v5kLxpQLDiCK6zzgw== optionalDependencies: - stylelint-scss "^4.3.0" + stylelint-scss "^5.0.0 || ^6.0.0" stylelint-config-prettier@^9.0.3: version "9.0.5" @@ -8440,21 +8616,20 @@ stylelint-config-recommended@^9.0.0: resolved "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-9.0.0.tgz" integrity sha512-9YQSrJq4NvvRuTbzDsWX3rrFOzOlYBmZP+o513BJN/yfEmGSr0AxdvrWs0P/ilSpVV/wisamAHu5XSk8Rcf4CQ== -stylelint-scss@^4.3.0: - version "4.4.0" - resolved "https://registry.npmjs.org/stylelint-scss/-/stylelint-scss-4.4.0.tgz" - integrity sha512-Qy66a+/30aylFhPmUArHhVsHOun1qrO93LGT15uzLuLjWS7hKDfpFm34mYo1ndR4MCo8W4bEZM1+AlJRJORaaw== +"stylelint-scss@^5.0.0 || ^6.0.0": + version "5.0.1" + resolved "https://registry.yarnpkg.com/stylelint-scss/-/stylelint-scss-5.0.1.tgz#b33a6580b5734eace083cfc2cc3021225e28547f" + integrity sha512-n87iCRZrr2J7//I/QFsDXxFLnHKw633U4qvWZ+mOW6KDAp/HLj06H+6+f9zOuTYy+MdGdTuCSDROCpQIhw5fvQ== dependencies: - lodash "^4.17.21" postcss-media-query-parser "^0.2.3" postcss-resolve-nested-selector "^0.1.1" - postcss-selector-parser "^6.0.6" - postcss-value-parser "^4.1.0" + postcss-selector-parser "^6.0.13" + postcss-value-parser "^4.2.0" stylelint@^15.10.1: - version "15.10.1" - resolved "https://registry.yarnpkg.com/stylelint/-/stylelint-15.10.1.tgz#93f189958687e330c106b010cbec0c41dcae506d" - integrity sha512-CYkzYrCFfA/gnOR+u9kJ1PpzwG10WLVnoxHDuBA/JiwGqdM9+yx9+ou6SE/y9YHtfv1mcLo06fdadHTOx4gBZQ== + version "15.10.2" + resolved "https://registry.yarnpkg.com/stylelint/-/stylelint-15.10.2.tgz#0ee5a8371d3a2e1ff27fefd48309d3ddef7c3405" + integrity sha512-UxqSb3hB74g4DTO45QhUHkJMjKKU//lNUAOWyvPBVPZbCknJ5HjOWWZo+UDuhHa9FLeVdHBZXxu43eXkjyIPWg== dependencies: "@csstools/css-parser-algorithms" "^2.3.0" "@csstools/css-tokenizer" "^2.1.1" @@ -8463,7 +8638,7 @@ stylelint@^15.10.1: balanced-match "^2.0.0" colord "^2.9.3" cosmiconfig "^8.2.0" - css-functions-list "^3.1.0" + css-functions-list "^3.2.0" css-tree "^2.3.1" debug "^4.3.4" fast-glob "^3.3.0" @@ -8483,7 +8658,7 @@ stylelint@^15.10.1: micromatch "^4.0.5" normalize-path "^3.0.0" picocolors "^1.0.0" - postcss "^8.4.24" + postcss "^8.4.25" postcss-resolve-nested-selector "^0.1.1" postcss-safe-parser "^6.0.0" postcss-selector-parser "^6.0.13" @@ -8506,7 +8681,7 @@ supports-color@8.1.1: supports-color@^5.3.0: version "5.5.0" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== dependencies: has-flag "^3.0.0" @@ -8528,7 +8703,7 @@ supports-hyperlinks@^3.0.0: supports-preserve-symlinks-flag@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== svg-parser@^2.0.4: @@ -8538,7 +8713,7 @@ svg-parser@^2.0.4: svg-tags@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/svg-tags/-/svg-tags-1.0.0.tgz#58f71cee3bd519b59d4b2a843b6c7de64ac04764" integrity sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA== svgo@^2.7.0, svgo@^2.8.0: @@ -8568,7 +8743,7 @@ svgo@^3.0.2: table@^6.8.1: version "6.8.1" - resolved "https://registry.npmjs.org/table/-/table-6.8.1.tgz" + resolved "https://registry.yarnpkg.com/table/-/table-6.8.1.tgz#ea2b71359fe03b017a5fbc296204471158080bdf" integrity sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA== dependencies: ajv "^8.0.1" @@ -8577,7 +8752,7 @@ table@^6.8.1: string-width "^4.2.3" strip-ansi "^6.0.1" -tar-fs@^2.0.0, tar-fs@^2.1.1: +tar-fs@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.1.tgz#489a15ab85f1f0befabb370b7de4f9eb5cbe8784" integrity sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng== @@ -8587,6 +8762,15 @@ tar-fs@^2.0.0, tar-fs@^2.1.1: pump "^3.0.0" tar-stream "^2.1.4" +tar-fs@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-3.0.4.tgz#a21dc60a2d5d9f55e0089ccd78124f1d3771dbbf" + integrity sha512-5AFQU8b9qLfZCX9zp2duONhPmZv0hGYiBPJsyUdqMjzq/mqVpy/rEUSeHk1+YitmxugaptgBh5oDGU3VsAJq4w== + dependencies: + mkdirp-classic "^0.5.2" + pump "^3.0.0" + tar-stream "^3.1.5" + tar-stream@^2.1.4: version "2.2.0" resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" @@ -8598,6 +8782,15 @@ tar-stream@^2.1.4: inherits "^2.0.3" readable-stream "^3.1.1" +tar-stream@^3.1.5: + version "3.1.6" + resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-3.1.6.tgz#6520607b55a06f4a2e2e04db360ba7d338cc5bab" + integrity sha512-B/UyjYwPpMBv+PaFSWAmtYjwdrlEaZQEhMIBFNC5oEG8lpiW8XjcSdmEaClj28ArfKScKHs2nshz3k2le6crsg== + dependencies: + b4a "^1.6.4" + fast-fifo "^1.2.0" + streamx "^2.15.0" + tar@^6.1.2: version "6.1.15" resolved "https://registry.npmjs.org/tar/-/tar-6.1.15.tgz" @@ -8727,13 +8920,13 @@ ts-node@^10.9.1: v8-compile-cache-lib "^3.0.1" yn "3.1.1" -tsconfig-paths@^3.14.1: - version "3.14.1" - resolved "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz" - integrity sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ== +tsconfig-paths@^3.14.1, tsconfig-paths@^3.14.2: + version "3.14.2" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz#6e32f1f79412decd261f92d633a9dc1cfa99f088" + integrity sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g== dependencies: "@types/json5" "^0.0.29" - json5 "^1.0.1" + json5 "^1.0.2" minimist "^1.2.6" strip-bom "^3.0.0" @@ -8813,9 +9006,39 @@ type-fest@^1.0.1, type-fest@^1.2.1, type-fest@^1.2.2: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-1.4.0.tgz#e9fb813fe3bf1744ec359d55d1affefa76f14be1" integrity sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA== +typed-array-buffer@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz#18de3e7ed7974b0a729d3feecb94338d1472cd60" + integrity sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.1" + is-typed-array "^1.1.10" + +typed-array-byte-length@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz#d787a24a995711611fb2b87a4052799517b230d0" + integrity sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA== + dependencies: + call-bind "^1.0.2" + for-each "^0.3.3" + has-proto "^1.0.1" + is-typed-array "^1.1.10" + +typed-array-byte-offset@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz#cbbe89b51fdef9cd6aaf07ad4707340abbc4ea0b" + integrity sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + for-each "^0.3.3" + has-proto "^1.0.1" + is-typed-array "^1.1.10" + typed-array-length@^1.0.4: version "1.0.4" - resolved "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz" + resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.4.tgz#89d83785e5c4098bec72e08b319651f0eac9c1bb" integrity sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng== dependencies: call-bind "^1.0.2" @@ -8834,14 +9057,14 @@ typescript@^4.0, typescript@^4.5, typescript@^4.9.5: resolved "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz" integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== -ufo@^1.0.0, ufo@^1.1.1, ufo@^1.1.2: +ufo@^1.0.0, ufo@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/ufo/-/ufo-1.1.2.tgz#d0d9e0fa09dece0c31ffd57bd363f030a35cfe76" integrity sha512-TrY6DsjTQQgyS3E3dBaOXf0TpPD8u9FVrVYmKVegJuFw51n/YB9XPt+U6ydzFG5ZIN7+DIjPbNmXoBj9esYhgQ== unbox-primitive@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz" + resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== dependencies: call-bind "^1.0.2" @@ -8954,7 +9177,7 @@ use-sync-external-store@1.2.0, use-sync-external-store@^1.2.0: util-deprecate@^1.0.1, util-deprecate@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== uuid@3.4.0, uuid@^3.3.2: @@ -8962,10 +9185,10 @@ uuid@3.4.0, uuid@^3.3.2: resolved "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz" integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== -uuid@^8.3.2: - version "8.3.2" - resolved "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz" - integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== +uuid@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.0.tgz#592f550650024a38ceb0c562f2f6aa435761efb5" + integrity sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg== v8-compile-cache-lib@^3.0.1: version "3.0.1" @@ -8974,7 +9197,7 @@ v8-compile-cache-lib@^3.0.1: validate-npm-package-license@^3.0.1: version "3.0.4" - resolved "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== dependencies: spdx-correct "^3.0.0" @@ -9007,7 +9230,7 @@ vue@^3.2.23: web-streams-polyfill@^3.0.3: version "3.2.1" - resolved "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz" + resolved "https://registry.yarnpkg.com/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz#71c2718c52b45fd49dbeee88634b3a60ceab42a6" integrity sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q== webidl-conversions@^3.0.0: @@ -9025,7 +9248,7 @@ whatwg-url@^5.0.0: which-boxed-primitive@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz" + resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== dependencies: is-bigint "^1.0.1" @@ -9034,17 +9257,16 @@ which-boxed-primitive@^1.0.2: is-string "^1.0.5" is-symbol "^1.0.3" -which-typed-array@^1.1.9: - version "1.1.9" - resolved "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz" - integrity sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA== +which-typed-array@^1.1.10, which-typed-array@^1.1.11, which-typed-array@^1.1.9: + version "1.1.11" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.11.tgz#99d691f23c72aab6768680805a271b69761ed61a" + integrity sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew== dependencies: available-typed-arrays "^1.0.5" call-bind "^1.0.2" for-each "^0.3.3" gopd "^1.0.1" has-tostringtag "^1.0.0" - is-typed-array "^1.1.10" which@^1.2.9, which@^1.3.1: version "1.3.1"