diff --git a/package.json b/package.json index 9f85f7fc..85e8124c 100644 --- a/package.json +++ b/package.json @@ -69,13 +69,13 @@ }, "dependencies": { "analytics": "0.8.7", - "analytics-plugin-plausible": "0.0.6", "daisyui": "2.52.0", "dayjs": "^1.11.7", "js-base64": "3.7.5", "mermaid": "10.2.3", "monaco-editor": "0.39.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.0" diff --git a/src/lib/components/Navbar.svelte b/src/lib/components/Navbar.svelte index 7d826ae3..208af606 100644 --- a/src/lib/components/Navbar.svelte +++ b/src/lib/components/Navbar.svelte @@ -18,11 +18,11 @@ const links: Link[] = [ { title: 'Documentation', - href: 'https://mermaid-js.github.io/mermaid/intro/n00b-gettingStarted.html' + href: 'https://mermaid.js.org/intro/n00b-gettingStarted.html' }, { title: 'Tutorial', - href: 'https://mermaid-js.github.io/mermaid/config/Tutorials.html' + href: 'https://mermaid.js.org/config/Tutorials.html' }, { title: 'Mermaid', diff --git a/src/lib/util/plausible.ts b/src/lib/util/plausible.ts new file mode 100644 index 00000000..72c25e96 --- /dev/null +++ b/src/lib/util/plausible.ts @@ -0,0 +1,85 @@ +// Copied from https://github.com/ian/analytics/blob/main/packages/plausible/src/plausible.ts +// Added changes to enable auto-tracking of outbound links +import type { AnalyticsInstance } from 'analytics'; +import Plausible from 'plausible-tracker'; + +interface IPluginProperties { + instance: AnalyticsInstance; + config: IPluginConfig; +} + +interface IPluginConfig { + apiHost?: string; + domain?: string; + hashMode?: boolean; + trackLocalhost?: boolean; + outboundLinkTracking?: boolean; +} + +interface IProperties { + payload: IPayload; +} + +interface IPayload { + event: string; + properties: Readonly>; +} + +interface IPluginContext { + plausible: ReturnType | null; +} + +const defaultConfig = { + enabled: true +}; + +export default function plausiblePlugin(pluginConfig: IPluginConfig) { + const context: IPluginContext = { + plausible: null + }; + + return { + name: 'plausible-analytics', + config: { + ...defaultConfig, + ...pluginConfig + }, + + initialize: ({ config }: IPluginProperties) => { + const { apiHost, domain, hashMode, trackLocalhost, outboundLinkTracking } = config; + + const plausibleConfig = Object.fromEntries( + Object.entries({ + apiHost, + domain, + hashMode, + trackLocalhost + }).filter(([, value]) => value !== undefined) + ); + + context.plausible = Plausible(plausibleConfig); + if (outboundLinkTracking) { + context.plausible.enableAutoOutboundTracking(); + } + }, + + loaded: () => { + return Boolean(context.plausible); + }, + + page: ({ payload }: IProperties) => { + if (!context.plausible) return; + + const { properties } = payload; + context.plausible.trackPageview({}, { props: properties }); + }, + + // Set parameter scope at event level with 'event' method + track: ({ payload }: IProperties) => { + if (!context.plausible) return; + + const { properties, event } = payload; + context.plausible.trackEvent(event, { props: properties }); + } + }; +} diff --git a/src/lib/util/stats.ts b/src/lib/util/stats.ts index bdb0263c..5b0383dc 100644 --- a/src/lib/util/stats.ts +++ b/src/lib/util/stats.ts @@ -7,7 +7,7 @@ export const initAnalytics = async (): Promise => { try { const [{ Analytics }, { default: plausible }] = await Promise.all([ import('analytics'), - import('analytics-plugin-plausible') + import('./plausible') ]); analytics = Analytics({ app: 'mermaid-live-editor', @@ -16,7 +16,8 @@ export const initAnalytics = async (): Promise => { domain: 'mermaid.live', hashMode: false, // All tracked stats are public and available at https://p.mermaid.live/mermaid.live - apiHost: 'https://p.mermaid.live' + apiHost: 'https://p.mermaid.live', + outboundLinkTracking: true }) ] }); diff --git a/yarn.lock b/yarn.lock index 9ad0e4ce..422e09db 100644 --- a/yarn.lock +++ b/yarn.lock @@ -19,22 +19,6 @@ dependencies: "@analytics/global-storage-utils" "^0.1.7" -"@analytics/cookie-utils@^0.2.9": - version "0.2.10" - resolved "https://registry.yarnpkg.com/@analytics/cookie-utils/-/cookie-utils-0.2.10.tgz#94d1ad0766c58c4a294e5ca54f59b0a69bd574b4" - integrity sha512-k7oyW1PkMCnEdCYmHCLLXAsKavQh5ZRh5EeugBEUTlPJs8x8ajF+W1T0PYVDS26Impkea1sJR2etv/6l2pKtlg== - dependencies: - "@analytics/global-storage-utils" "^0.1.5" - -"@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.5": version "0.12.5" resolved "https://registry.yarnpkg.com/@analytics/core/-/core-0.12.5.tgz#dffdf847a384eaace5b8c109b5d29c673489e183" @@ -44,13 +28,6 @@ "@analytics/type-utils" "^0.6.2" analytics-utils "^1.0.12" -"@analytics/global-storage-utils@^0.1.4", "@analytics/global-storage-utils@^0.1.5": - version "0.1.5" - resolved "https://registry.yarnpkg.com/@analytics/global-storage-utils/-/global-storage-utils-0.1.5.tgz#54cc14f8d678610b5fca1e98215fe29fff662f31" - integrity sha512-DzOCd0qK7PGnz/dgBYNzLmaFBkxcEHM6/CpWMY7hel1IBUldMsyet4sdRgI2Nk+Wc6B/YvqVqos68p5ntB59zA== - dependencies: - "@analytics/type-utils" "^0.6.0" - "@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" @@ -65,20 +42,6 @@ dependencies: "@analytics/global-storage-utils" "^0.1.7" -"@analytics/localstorage-utils@^0.1.7": - version "0.1.8" - resolved "https://registry.yarnpkg.com/@analytics/localstorage-utils/-/localstorage-utils-0.1.8.tgz#eab6a9690ccd3c05d131e3a9788b4443affdb800" - integrity sha512-tU5rLEHdYRc4EmRXkWacMJSmu4SeJfQuxvthSHHRVx3hGBQ00MJRDGyDHMXcrLKQXrBpsJo6t/8YRavHLOxDPQ== - dependencies: - "@analytics/global-storage-utils" "^0.1.5" - -"@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" @@ -86,17 +49,6 @@ 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" @@ -108,16 +60,6 @@ "@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.0": - version "0.6.0" - resolved "https://registry.yarnpkg.com/@analytics/type-utils/-/type-utils-0.6.0.tgz#1b8745516da5a654d292ed3f2db893c61cd3d9c5" - integrity sha512-1Yw7u/COtxx06BfwlI+kVhsa/upKYzmCNrT4c8QDeCY2KMYlnijkUjtHiPU08HxyTIVB5j6d75O0YWVIHwQS8g== - "@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" @@ -914,14 +856,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: version "1.0.12" resolved "https://registry.yarnpkg.com/analytics-utils/-/analytics-utils-1.0.12.tgz#07bd63471d238e80f42d557fba039365f09c50db" @@ -930,14 +864,6 @@ analytics-utils@^1.0.12: "@analytics/type-utils" "^0.6.2" dlv "^1.1.3" -analytics-utils@^1.0.9: - version "1.0.10" - resolved "https://registry.yarnpkg.com/analytics-utils/-/analytics-utils-1.0.10.tgz#e44078176c67005e5b11aae1dc538202744a5ca5" - integrity sha512-ZKYKhip7Sf09qE85l4vZMBPR3fz6ISUTlwzkWSwJHbzLLzP5qrWQtcQlBcP9Pah7BMNSq8pqho+PX4ZKB014Yg== - dependencies: - "@analytics/type-utils" "^0.6.0" - dlv "^1.1.3" - analytics@0.8.7: version "0.8.7" resolved "https://registry.yarnpkg.com/analytics/-/analytics-0.8.7.tgz#cc23e8aaaaf7f0207e0ca88de5936af75d9cc0df" @@ -946,14 +872,6 @@ analytics@0.8.7: "@analytics/core" "^0.12.5" "@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" @@ -4449,7 +4367,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==