nuxt-applicationinsights
Version:
Application insights integration for Nuxt
43 lines (42 loc) • 1.41 kB
JavaScript
import { defineNuxtPlugin } from "nuxt/app";
import { ApplicationInsights } from "@microsoft/applicationinsights-web";
import { useRuntimeConfig } from "#imports";
import { createFetch } from "ofetch";
import { baseURL } from "#build/paths.mjs";
import { toRaw } from "vue";
export default defineNuxtPlugin({
name: "nuxt-applicationinsights:client",
async setup(nuxtApp) {
const runtimeConfig = useRuntimeConfig();
const config = {
config: toRaw(runtimeConfig.public).applicationinsights ?? {}
};
await nuxtApp.callHook("applicationinsights:config:client", config);
const applicationInsights = new ApplicationInsights(config);
applicationInsights.addTelemetryInitializer((e) => {
if (e.baseType === "PageviewData" && nuxtApp.$router && e.baseData?.uri) {
const resolvedRoute = nuxtApp.$router.resolve(
new URL(e.baseData.uri).pathname
);
e.baseData.name = resolvedRoute.name || resolvedRoute.path || resolvedRoute.fullPath;
}
return true;
});
try {
applicationInsights.loadAppInsights();
delete globalThis.$fetch;
globalThis.$fetch = createFetch({
defaults: {
baseURL: baseURL()
}
});
} catch (e) {
nuxtApp.callHook("applicationinsights:load:error", e);
}
return {
provide: {
appInsights: applicationInsights
}
};
}
});