nuxt-utm
Version:
A Nuxt 3 module for tracking UTM parameters.
44 lines (43 loc) • 1.21 kB
JavaScript
import { ref } from "vue";
import {
readLocalData,
getSessionID,
getUtmParams,
getAdditionalInfo,
isRepeatedEntry,
urlHasGCLID,
getGCLID
} from "./utm.js";
import { defineNuxtPlugin } from "#app";
const LOCAL_STORAGE_KEY = "nuxt-utm-data";
const SESSION_ID_KEY = "nuxt-utm-session-id";
export default defineNuxtPlugin((nuxtApp) => {
const data = ref([]);
const processUtmData = () => {
if (typeof window === "undefined") return;
data.value = readLocalData(LOCAL_STORAGE_KEY);
const sessionId = getSessionID(SESSION_ID_KEY);
const query = nuxtApp._route.query;
const utmParams = getUtmParams(query);
const additionalInfo = getAdditionalInfo();
const timestamp = (/* @__PURE__ */ new Date()).toISOString();
const dataObject = {
timestamp,
utmParams,
additionalInfo,
sessionId
};
if (urlHasGCLID(query)) {
dataObject.gclidParams = getGCLID(query);
}
if (isRepeatedEntry(data, dataObject)) return;
data.value.unshift(dataObject);
localStorage.setItem(LOCAL_STORAGE_KEY, JSON.stringify(data.value));
};
nuxtApp.hook("app:mounted", processUtmData);
return {
provide: {
utm: data
}
};
});