'use strict'; const unplugin = require('unplugin'); const core = require('@unplugin-analytics/core'); const scule = require('scule'); function renderScriptTag(tag) { const desc = { tag: "script", attrs: {}, injectTo: "head" }; if (tag.async) { desc.attrs.async = true; } if (tag.defer) { desc.attrs.defer = true; } for (const [key, value] of Object.entries(tag.dataset ?? {})) { desc.attrs[scule.kebabCase(`data-${key}`)] = escape(value); } if ("src" in tag) { desc.attrs.src = tag.src; } else { desc.children = tag.children; } return desc; } function escape(text) { return text.replace(/"/g, `"`); } const UnpluginAnalyticsRuntime = unplugin.createUnplugin((options = {}) => { const scripts = { clarity() { return [ `export let clarity = import.meta.env.SSR ? undefined : window.clarity;`, ` if (!import.meta.env.SSR && !clarity) { window.addEventListener("load", (event) => { clarity = window.clarity; }); }` ].join("\n"); }, umami() { return [ `export let umami = import.meta.env.SSR ? undefined : window.umami;`, ` if (!import.meta.env.SSR && !umami) { window.addEventListener("load", (event) => { umami = window.umami; }); }` ].join("\n"); }, scripts() { const tags = core.generate(options.analytics ?? []); return [`const tags = ${JSON.stringify(tags)};`, `export default tags;`].join("\n"); } }; const moduleNames = Object.keys(scripts).map((s) => `~analytics/${s}`); return { name: "unplugin-analytics:runtime", resolveId(id) { if (moduleNames.includes(id)) { return `\0${id}`; } }, loadInclude(id) { if (!id.startsWith("\0")) return false; id = id.slice(1); return moduleNames.includes(id); }, async load(id) { if (!id.startsWith("\0")) return; id = id.slice(1 + `~analytics/`.length); if (id in scripts) { return scripts[id](); } } }; }); const UnpluginAnalytics = unplugin.createUnplugin((options = {}) => { let isDev = false; return { name: "unplugin-analytics:html", vite: { configResolved(resolvedConfig) { isDev = resolvedConfig.command === "serve"; }, transformIndexHtml(_html, ctx) { if (options.dev && isDev) { return; } const tags = core.generate(options.analytics ?? []); return tags.map(renderScriptTag).filter(Boolean); } } }; }); exports.UnpluginAnalytics = UnpluginAnalytics; exports.UnpluginAnalyticsRuntime = UnpluginAnalyticsRuntime;