diff --git a/.env b/.env
new file mode 100644
index 00000000..5d946ab4
--- /dev/null
+++ b/.env
@@ -0,0 +1,2 @@
+ MERMAID_DOMAIN="mermaid.live"
+ MERMAID_ANALYTICS_URL="https://p.mermaid.live"
diff --git a/.vscode/settings.json b/.vscode/settings.json
index 71acc20d..e1731904 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -9,10 +9,12 @@
"cssnano",
"daisyui",
"esserializer",
+ "gantt",
"KROKI",
"localstorage",
"mermaidchart",
"mindmap",
+ "Pageview",
"pako",
"Serde",
"serdes",
diff --git a/package.json b/package.json
index d1d76c50..37592fa9 100644
--- a/package.json
+++ b/package.json
@@ -68,14 +68,13 @@
"vitest": "^0.34.0"
},
"dependencies": {
- "analytics": "0.8.9",
- "analytics-plugin-plausible": "0.0.6",
"daisyui": "2.52.0",
"dayjs": "^1.11.7",
"js-base64": "3.7.5",
"mermaid": "10.6.1",
"monaco-editor": "0.45.0",
"pako": "2.1.0",
+ "plausible-tracker": "^0.3.8",
"random-word-slugs": "0.1.7",
"svg-pan-zoom": "3.6.1",
"uuid": "9.0.1"
diff --git a/src/lib/components/Navbar.svelte b/src/lib/components/Navbar.svelte
index 2c54e9da..775db8a3 100644
--- a/src/lib/components/Navbar.svelte
+++ b/src/lib/components/Navbar.svelte
@@ -1,7 +1,7 @@
@@ -51,7 +51,7 @@
let activePromotion = getActivePromotion();
const trackBannerClick = () => {
- if (!analytics || !activePromotion) {
+ if (!plausible || !activePromotion) {
return;
}
logEvent('bannerClick', {
diff --git a/src/lib/util/stats.ts b/src/lib/util/stats.ts
index 7a5030b1..4e70e64c 100644
--- a/src/lib/util/stats.ts
+++ b/src/lib/util/stats.ts
@@ -1,25 +1,17 @@
import { browser } from '$app/environment';
-import type { AnalyticsInstance } from 'analytics';
import { env } from './env';
-export let analytics: AnalyticsInstance | undefined;
+import type PlausibleInstance from 'plausible-tracker';
+export let plausible: ReturnType | undefined;
export const initAnalytics = async (): Promise => {
- if (browser && !analytics) {
+ if (browser && !plausible) {
try {
- const [{ Analytics }, { default: plausible }] = await Promise.all([
- import('analytics'),
- import('analytics-plugin-plausible')
- ]);
- analytics = Analytics({
- app: 'mermaid-live-editor',
- plugins: [
- plausible({
- domain: env.domain,
- hashMode: false,
- // All tracked stats are public and available at https://p.mermaid.live/mermaid.live
- apiHost: env.analyticsUrl
- })
- ]
+ const { default: Plausible } = await import('plausible-tracker');
+ plausible = Plausible({
+ domain: env.domain,
+ hashMode: false,
+ // All tracked stats are public and available at https://p.mermaid.live/mermaid.live
+ apiHost: env.analyticsUrl
});
} catch (error) {
console.log(error);
@@ -101,20 +93,28 @@ const delaysPerEvent = {
history: defaultDelay,
migration: defaultDelay,
themeChange: defaultDelay,
- bannerClick: defaultDelay
+ bannerClick: defaultDelay,
+ version: defaultDelay
};
export type AnalyticsEvent = keyof typeof delaysPerEvent;
const timeouts: Map = new Map();
// manual debounce to reduce the number of events sent to analytics
-export const logEvent = (name: AnalyticsEvent, data?: unknown): void => {
- if (!analytics) {
+export const logEvent = (
+ name: AnalyticsEvent,
+ data?: Record
+): void => {
+ if (!plausible) {
return;
}
const key = data ? JSON.stringify({ name, data }) : name;
if (timeouts.has(key)) {
clearTimeout(timeouts.get(key));
} else {
- void analytics.track(name, data);
+ plausible.trackEvent(
+ name,
+ { props: data },
+ { url: window.location.origin + window.location.pathname }
+ );
}
timeouts.set(
key,
diff --git a/src/lib/util/util.ts b/src/lib/util/util.ts
index ad8f3719..d082a703 100644
--- a/src/lib/util/util.ts
+++ b/src/lib/util/util.ts
@@ -1,5 +1,5 @@
import { initURLSubscription, loadState, updateCodeStore } from './state';
-import { analytics, initAnalytics } from './stats';
+import { plausible, initAnalytics } from './stats';
import { loadDataFromUrl } from './fileLoaders/loader';
import { initLoading } from './loading';
import { applyMigrations } from './migrations';
@@ -21,7 +21,7 @@ export const initHandler = async (): Promise => {
syncDiagram();
initURLSubscription();
await initAnalytics();
- await analytics?.page();
+ plausible?.trackPageview({ url: window.location.origin + window.location.pathname });
};
export const isMac = navigator.platform.toUpperCase().includes('MAC');
diff --git a/yarn.lock b/yarn.lock
index 74147a8e..e72ceef7 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -17,91 +17,6 @@
resolved "https://registry.yarnpkg.com/@alloc/quick-lru/-/quick-lru-5.2.0.tgz#7bf68b20c0a350f936915fcae06f58e32007ce30"
integrity sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==
-"@analytics/cookie-utils@^0.2.12", "@analytics/cookie-utils@^0.2.9":
- version "0.2.12"
- resolved "https://registry.yarnpkg.com/@analytics/cookie-utils/-/cookie-utils-0.2.12.tgz#acc38dd76ead968050776fb8e57e571e6d37cbc7"
- integrity sha512-2h/yuIu3kmu+ZJlKmlT6GoRvUEY2k1BbQBezEv5kGhnn9KpmzPz715Y3GmM2i+m7Y0QmBdVUoA260dQZkofs2A==
- dependencies:
- "@analytics/global-storage-utils" "^0.1.7"
-
-"@analytics/core@^0.10.23":
- version "0.10.23"
- resolved "https://registry.yarnpkg.com/@analytics/core/-/core-0.10.23.tgz#869218c28bae4948bdecfd76415064e83bb8ca8d"
- integrity sha512-crOJ7tNA5xak5YGiiX8IvPyqf4Hy3tMmTH4dTvQiOapO6BiBJcxBUkjtJNPwZlhS4nmsWh0skeTBr4Kv92RzeA==
- dependencies:
- "@analytics/global-storage-utils" "^0.1.4"
- "@analytics/type-utils" "^0.5.4"
- analytics-utils "^1.0.9"
-
-"@analytics/core@^0.12.7":
- version "0.12.7"
- resolved "https://registry.yarnpkg.com/@analytics/core/-/core-0.12.7.tgz#118b25f1753796a7c73ffabd4b789219d511e050"
- integrity sha512-etmIPCoxWLoUZ/o1o2zvIk4cdVHa8I1xUQtTuLA+YXQ4SsFbm75ZoMXJBqWrNSENpqCJgoL6hizl5uTbkNN+1Q==
- dependencies:
- "@analytics/global-storage-utils" "^0.1.7"
- "@analytics/type-utils" "^0.6.2"
- analytics-utils "^1.0.12"
-
-"@analytics/global-storage-utils@^0.1.4", "@analytics/global-storage-utils@^0.1.7":
- version "0.1.7"
- resolved "https://registry.yarnpkg.com/@analytics/global-storage-utils/-/global-storage-utils-0.1.7.tgz#c6a12eb133a6e44101b7c3529c82e3e89ac9ce46"
- integrity sha512-V+spzGLZYm4biZT4uefaylm80SrLXf8WOTv9hCgA46cLcyxx3LD4GCpssp1lj+RcWLl/uXJQBRO4Mnn/o1x6Gw==
- dependencies:
- "@analytics/type-utils" "^0.6.2"
-
-"@analytics/localstorage-utils@^0.1.10", "@analytics/localstorage-utils@^0.1.7":
- version "0.1.10"
- resolved "https://registry.yarnpkg.com/@analytics/localstorage-utils/-/localstorage-utils-0.1.10.tgz#8e9b03604e79a530e9a5ab6748c8ceb96153b95c"
- integrity sha512-uJS+Jp1yLG5VFCgA5T82ZODYBS0xuDQx0NtAZrgbqt9j51BX3TcgmOez5LVkrUNu/lpbxjCLq35I4TKj78VmOQ==
- dependencies:
- "@analytics/global-storage-utils" "^0.1.7"
-
-"@analytics/session-storage-utils@^0.0.4":
- version "0.0.4"
- resolved "https://registry.yarnpkg.com/@analytics/session-storage-utils/-/session-storage-utils-0.0.4.tgz#6aefe0eb012038f3722433c411485a2b7f540a15"
- integrity sha512-HPVIUMpL9ua8uBj5kLsTOLbxUNP0GVYQowC9AwX1S/T39Eg8RKwbV/GYaDAqeCjEi8BGYOEguqI9kFGqxIt1iA==
- dependencies:
- "@analytics/global-storage-utils" "^0.1.4"
-
-"@analytics/session-storage-utils@^0.0.7":
- version "0.0.7"
- resolved "https://registry.yarnpkg.com/@analytics/session-storage-utils/-/session-storage-utils-0.0.7.tgz#e355c60b14d4fbcf20983e5cfcb7cb838b4c57ab"
- integrity sha512-PSv40UxG96HVcjY15e3zOqU2n8IqXnH8XvTkg1X43uXNTKVSebiI2kUjA3Q7ESFbw5DPwcLbJhV7GforpuBLDw==
- dependencies:
- "@analytics/global-storage-utils" "^0.1.7"
-
-"@analytics/storage-utils@^0.3.0":
- version "0.3.0"
- resolved "https://registry.yarnpkg.com/@analytics/storage-utils/-/storage-utils-0.3.0.tgz#7a9795af6b73e13194edb03eb27402c4877d9d96"
- integrity sha512-uxOz5wdZkuxc7RaWlNsj/7iFr0GkkFqmxyIYY4oFk91E3/hyosny59lb8DEC/MpdUUAoNI+clU+I/PYcv3p1WA==
- dependencies:
- "@analytics/cookie-utils" "^0.2.9"
- "@analytics/global-storage-utils" "^0.1.4"
- "@analytics/localstorage-utils" "^0.1.7"
- "@analytics/session-storage-utils" "^0.0.4"
- "@analytics/type-utils" "^0.5.4"
-
-"@analytics/storage-utils@^0.4.2":
- version "0.4.2"
- resolved "https://registry.yarnpkg.com/@analytics/storage-utils/-/storage-utils-0.4.2.tgz#222717832a533a1a2516aa3a22d5db80d14a881b"
- integrity sha512-AXObwyVQw9h2uJh1t2hUgabtVxzYpW+7uKVbdHQK80vr3Td5rrmCxrCxarh7HUuAgSDZ0bZWqmYxVgmwKceaLg==
- dependencies:
- "@analytics/cookie-utils" "^0.2.12"
- "@analytics/global-storage-utils" "^0.1.7"
- "@analytics/localstorage-utils" "^0.1.10"
- "@analytics/session-storage-utils" "^0.0.7"
- "@analytics/type-utils" "^0.6.2"
-
-"@analytics/type-utils@^0.5.4":
- version "0.5.4"
- resolved "https://registry.yarnpkg.com/@analytics/type-utils/-/type-utils-0.5.4.tgz#1fcaa6d1d557c0377d1fbd8615624ac918d1727d"
- integrity sha512-2CT5YTsvif3gYPYp5hPIhh66mUo/Cu+k5OiHbX3k5p+YsZ5Bggcp/wLEFnrdKG4tKgGn5SOKkEtL63VYhGXX7g==
-
-"@analytics/type-utils@^0.6.2":
- version "0.6.2"
- resolved "https://registry.yarnpkg.com/@analytics/type-utils/-/type-utils-0.6.2.tgz#60d706603a98a95681d4b1e9726c703fdd541a9e"
- integrity sha512-TD+xbmsBLyYy/IxFimW/YL/9L2IEnM7/EoV9Aeh56U64Ify8o27HJcKjo38XY9Tcn0uOq1AX3thkKgvtWvwFQg==
-
"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13":
version "7.22.10"
resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.10.tgz#1c20e612b768fefa75f6e90d6ecb86329247f0a3"
@@ -1003,38 +918,6 @@ am-i-a-dependency@1.1.2:
resolved "https://registry.yarnpkg.com/am-i-a-dependency/-/am-i-a-dependency-1.1.2.tgz#f9d3422304d6f642f821e4c407565035f6167f1f"
integrity sha512-h9Wm0GBuTJVKbtwDHBzdJr932O9iTR5lAgebGSke1b3V4pqzbwOsa1R3bYhff89Ch3+v3A4EgbX3vem+5Rl6Zg==
-analytics-plugin-plausible@0.0.6:
- version "0.0.6"
- resolved "https://registry.yarnpkg.com/analytics-plugin-plausible/-/analytics-plugin-plausible-0.0.6.tgz#22595821f1d201cb2e58dde2bb688d78fae78725"
- integrity sha512-gXeoJo85JLO91DckbPq23jn/QJW4vg1hA/bRcAbcAo5D6u6JUIg/rG6Ecwkk75sPefnGFIZ6qGHIoz1b2wFK9w==
- dependencies:
- analytics "^0.7.5"
- plausible-tracker "^0.3.1"
-
-analytics-utils@^1.0.12, analytics-utils@^1.0.9:
- version "1.0.12"
- resolved "https://registry.yarnpkg.com/analytics-utils/-/analytics-utils-1.0.12.tgz#07bd63471d238e80f42d557fba039365f09c50db"
- integrity sha512-WvV2YWgsnXLxaY0QYux0crpBAg/0JA763NmbMVz22jKhMPo7dpTBet8G2IlF7ixTjLDzGlkHk1ZaKqqQmjJ+4w==
- dependencies:
- "@analytics/type-utils" "^0.6.2"
- dlv "^1.1.3"
-
-analytics@0.8.9:
- version "0.8.9"
- resolved "https://registry.yarnpkg.com/analytics/-/analytics-0.8.9.tgz#71648ec804fbf01f05abbd0e27bc11049d959786"
- integrity sha512-oTbUzQpncMTslakqfK70GgB6bopk5hY+uuekwnadMkDyqNLgcD02KRzteTnO7q5Ko6wDECVtT8xi/6OuAMZykA==
- dependencies:
- "@analytics/core" "^0.12.7"
- "@analytics/storage-utils" "^0.4.2"
-
-analytics@^0.7.5:
- version "0.7.23"
- resolved "https://registry.yarnpkg.com/analytics/-/analytics-0.7.23.tgz#cff8d43c67fa851229232bc251e58a27e2f863eb"
- integrity sha512-9zujZOUmDnRGRNoKIXwongMlOV1Odi+5ftRpfTPlYYQfX7Kl6ttSaP2caFQhKr5SenSCW2RMIxiLzX+LynE7sw==
- dependencies:
- "@analytics/core" "^0.10.23"
- "@analytics/storage-utils" "^0.3.0"
-
ansi-colors@^4.1.1:
version "4.1.3"
resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b"
@@ -4769,7 +4652,7 @@ pkg-types@^1.0.3:
mlly "^1.2.0"
pathe "^1.1.0"
-plausible-tracker@^0.3.1:
+plausible-tracker@^0.3.8:
version "0.3.8"
resolved "https://registry.yarnpkg.com/plausible-tracker/-/plausible-tracker-0.3.8.tgz#9b8b322cc41e0e1d6473869ef234deea365a5a40"
integrity sha512-lmOWYQ7s9KOUJ1R+YTOR3HrjdbxIS2Z4de0P/Jx2dQPteznJl2eX3tXxKClpvbfyGP59B5bbhW8ftN59HbbFSg==