UNPKG

v-plausible

Version:
57 lines (56 loc) 1.75 kB
import defu from "defu"; import Plausible from "plausible-tracker"; import { inject } from "vue"; function loadScript(source, options = {}) { return new Promise((resolve, reject) => { const head = document.head || document.getElementsByTagName("head")[0]; const script = document.createElement("script"); const { src, type = options.partytown ? "text/partytown" : "text/javascript", defer = false, async = false, ...restAttrs } = options; script.type = type; script.defer = defer; script.async = async; script.src = src || source; script.setAttribute("data-domain", options["data-domain"]); Object.keys(restAttrs).forEach((key) => { script[key] = restAttrs[key]; }); head.appendChild(script); script.onload = resolve; script.onerror = reject; }); } export function createPlausible(options) { const plausible = { install(app) { const data = defu(options.init, { apiHost: "https://plausible.io", enableAutoPageviews: true }); const plausible2 = Plausible(data); if (options.settings.enableAutoPageviews === true) plausible2.enableAutoPageviews(); if (options.settings.enableAutoOutboundTracking === true) plausible2.enableAutoOutboundTracking(); loadScript(`${data.apiHost}/js/script.js`, { "defer": true, "data-domain": data.domain || "https://plausible.io", "partytown": options.partytown || false }); app.config.globalProperties.$plausible = plausible2; app.provide("$plausible", plausible2); } }; return plausible; } export function usePlausible() { const plausible = inject("$plausible"); return { ...plausible }; }