@nuxt/scripts
Version:
Load third-party scripts with better performance, privacy and DX in Nuxt Apps.
104 lines (103 loc) • 4.3 kB
JavaScript
import { useRegistryScript } from "../utils.js";
import { object, optional, string, boolean, number } from "#nuxt-scripts-validator";
export const DatabuddyAnalyticsOptions = object({
// Required
clientId: string(),
// Advanced
scriptUrl: optional(string()),
// defaults to https://cdn.databuddy.cc/databuddy.js
apiUrl: optional(string()),
// defaults to https://basket.databuddy.cc
disabled: optional(boolean()),
// Core tracking (enabled by default by SDK)
trackScreenViews: optional(boolean()),
trackPerformance: optional(boolean()),
trackSessions: optional(boolean()),
// Optional tracking
trackWebVitals: optional(boolean()),
trackErrors: optional(boolean()),
trackOutgoingLinks: optional(boolean()),
trackScrollDepth: optional(boolean()),
trackEngagement: optional(boolean()),
trackInteractions: optional(boolean()),
trackAttributes: optional(boolean()),
trackHashChanges: optional(boolean()),
trackExitIntent: optional(boolean()),
trackBounceRate: optional(boolean()),
// Performance options
enableBatching: optional(boolean()),
batchSize: optional(number()),
batchTimeout: optional(number()),
enableRetries: optional(boolean()),
maxRetries: optional(number()),
initialRetryDelay: optional(number()),
samplingRate: optional(number()),
// SDK metadata
sdk: optional(string()),
sdkVersion: optional(string()),
// Observability & logging (accepted by SDK config)
enableObservability: optional(boolean()),
observabilityService: optional(string()),
observabilityEnvironment: optional(string()),
observabilityVersion: optional(string()),
enableLogging: optional(boolean()),
enableTracing: optional(boolean()),
enableErrorTracking: optional(boolean())
});
export function useScriptDatabuddyAnalytics(_options) {
return useRegistryScript("databuddyAnalytics", (options) => {
return {
scriptInput: {
// Default CDN script, can be overridden via scriptUrl
"src": options?.scriptUrl || "https://cdn.databuddy.cc/databuddy.js",
"data-client-id": options.clientId,
// Advanced
"data-api-url": options?.apiUrl,
"data-disabled": options?.disabled,
// Core
"data-track-screen-views": options?.trackScreenViews,
"data-track-performance": options?.trackPerformance,
"data-track-sessions": options?.trackSessions,
// Optional
"data-track-web-vitals": options?.trackWebVitals,
"data-track-errors": options?.trackErrors,
"data-track-outgoing-links": options?.trackOutgoingLinks,
"data-track-scroll-depth": options?.trackScrollDepth,
"data-track-engagement": options?.trackEngagement,
"data-track-interactions": options?.trackInteractions,
"data-track-attributes": options?.trackAttributes,
"data-track-hash-changes": options?.trackHashChanges,
"data-track-exit-intent": options?.trackExitIntent,
"data-track-bounce-rate": options?.trackBounceRate,
// Performance tuning
"data-enable-batching": options?.enableBatching,
"data-batch-size": options?.batchSize,
"data-batch-timeout": options?.batchTimeout,
"data-enable-retries": options?.enableRetries,
"data-max-retries": options?.maxRetries,
"data-initial-retry-delay": options?.initialRetryDelay,
"data-sampling-rate": options?.samplingRate,
// SDK meta
"data-sdk": options?.sdk,
"data-sdk-version": options?.sdkVersion,
// Observability & logging
"data-enable-observability": options?.enableObservability,
"data-observability-service": options?.observabilityService,
"data-observability-environment": options?.observabilityEnvironment,
"data-observability-version": options?.observabilityVersion,
"data-enable-logging": options?.enableLogging,
"data-enable-tracing": options?.enableTracing,
"data-enable-error-tracking": options?.enableErrorTracking
},
schema: import.meta.dev ? DatabuddyAnalyticsOptions : void 0,
scriptOptions: {
use() {
if (typeof window === "undefined") {
return null;
}
return window.db || window.databuddy || null;
}
}
};
}, _options);
}