diff --git a/README.md b/README.md index f6d5ad6..9106cb7 100644 --- a/README.md +++ b/README.md @@ -219,6 +219,21 @@ export default { script: 'https://example.com/proxy.js', noScript: 'https://example.com/simple/noscript.gif' }, + + // Plausible + plausible: { + enabled: true, // or false + /** + * You can overwrite domain name to send stats to multiple Plausible dashboards (optional) + * @see https://plausible.io/docs/plausible-script#can-i-send-stats-to-multiple-dashboards-at-the-same-time + */ + hostname: 'example.com', + /** + * You can configure a proxy (optional) + * @see https://plausible.io/docs/proxy/introduction + */ + script: 'example.com/js/script.js', + }, }) ], } diff --git a/example/vite.config.ts b/example/vite.config.ts index 7806260..d2f9598 100644 --- a/example/vite.config.ts +++ b/example/vite.config.ts @@ -39,6 +39,11 @@ export default defineConfig({ // script: 'https://example.com/proxy.js', // noScript: 'https://example.com/simple/noscript.gif', // }, + // plausible: { + // enabled: true, + // hostname: 'www.custom.com', + // script: 'https://example.com/js/script.js', + // }, }), ], }) diff --git a/src/index.ts b/src/index.ts index 7f52d2d..4941bc4 100644 --- a/src/index.ts +++ b/src/index.ts @@ -25,6 +25,8 @@ import type { TikTokPixelOptions } from './tiktok-pixel' import injectTikTokPixel from './tiktok-pixel' import type { SimpleAnalyticsOptions } from './simple-analytics' import injectSimpleAnalytics from './simple-analytics' +import type { PlausibleAnalyticsOptions } from './plausible' +import injectPlausible from './plausible' export interface VitePluginRadarOptions { enableDev?: boolean @@ -41,6 +43,7 @@ export interface VitePluginRadarOptions { unbounce?: UnbounceOptions | boolean tiktok?: TikTokPixelOptions simpleanalytics?: SimpleAnalyticsOptions + plausible?: PlausibleAnalyticsOptions } export function VitePluginRadar({ @@ -58,6 +61,7 @@ export function VitePluginRadar({ unbounce, tiktok, simpleanalytics, + plausible, }: VitePluginRadarOptions): Plugin { let viteConfig: ResolvedConfig @@ -114,6 +118,9 @@ export function VitePluginRadar({ if (simpleanalytics) tags.push(...injectSimpleAnalytics(simpleanalytics)) + if (plausible) + tags.push(...injectPlausible(plausible)) + return tags }, } diff --git a/src/plausible.ts b/src/plausible.ts new file mode 100644 index 0000000..d4ac8c7 --- /dev/null +++ b/src/plausible.ts @@ -0,0 +1,36 @@ +import type { HtmlTagDescriptor } from 'vite' + +export interface PlausibleAnalyticsOptions { + enabled: boolean + hostname?: string + script?: string +} + +/** + * @see https://plausible.io/docs/plausible-script + */ +const DefaultScriptUrl = 'https://plausible.io/js/script.js' + +function injectTag(options: PlausibleAnalyticsOptions): HtmlTagDescriptor[] { + const tags: HtmlTagDescriptor[] = [] + + if (!options.enabled) + return tags + + const scriptAttrs: Record = { + src: options.script || DefaultScriptUrl, + defer: true, + } + + if (options.hostname) + scriptAttrs['data-domain'] = options.hostname + + tags.push({ + tag: 'script', + injectTo: 'head', + attrs: scriptAttrs, + }) + + return tags +} +export default injectTag