nuxt-utm
Version:
A Nuxt 3 module for tracking UTM parameters.
46 lines (45 loc) • 1.19 kB
JavaScript
import {
readLocalData,
getSessionID,
urlHasUtmParams,
getUtmParams,
getAdditionalInfo,
isRepeatedEntry,
urlHasGCLID,
getGCLID
} from "./utm.mjs";
import { ref } from "vue";
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([]);
nuxtApp.hook("app:mounted", () => {
data.value = readLocalData(LOCAL_STORAGE_KEY);
const sessionId = getSessionID(SESSION_ID_KEY);
const query = nuxtApp._route.query;
if (!urlHasUtmParams(query))
return;
const utmParams = getUtmParams(query);
const additionalInfo = getAdditionalInfo();
const timestamp = (/* @__PURE__ */ new Date()).toISOString();
const dataObject = {
timestamp,
utmParams,
additionalInfo,
sessionId
};
if (urlHasGCLID) {
dataObject.gclidParams = getGCLID(query);
}
if (isRepeatedEntry(data, dataObject))
return;
data.value.unshift(dataObject);
localStorage.setItem(LOCAL_STORAGE_KEY, JSON.stringify(data.value));
});
return {
provide: {
utm: data
}
};
});