UNPKG

@safaricom-mxl/nextjs

Version:

MXL Javascript RUM agent for nextjs

227 lines (222 loc) 5.68 kB
var __getOwnPropNames = Object.getOwnPropertyNames; var __commonJS = (cb, mod) => function __require() { return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; }; // package.json var require_package = __commonJS({ "package.json"(exports, module) { module.exports = { name: "@safaricom-mxl/nextjs", version: "0.0.79", description: "MXL Javascript RUM agent for nextjs", main: "./dist/index.js", type: "module", scripts: { test: "vitest", dev: "rm -rf /dist && tsup --watch", build: "rm -rf dist && tsup", clean: "git clean -xdf .turbo node_modules coverage dist tmp", format: "biome format .", lint: "biome check ." }, keywords: [ "mxl", "event tracker", "web analytics", "analytics" ], author: "Francis Masha", license: "MIT", exports: { ".": { browser: "./dist/index.js", import: "./dist/index.js", require: "./dist/index.cjs" }, "./server": { import: "./dist/server.cjs", default: "./dist/server.js" } }, typesVersions: { "*": { "*": [ "dist/index.d.ts", "dist/server.d.ts" ] } }, types: "dist/index.d.ts", files: [ "dist", "package.json", "LICENSE" ], devDependencies: { "@safaricom-mxl/tsconfig": "workspace:*", "@types/node": "^24.10.1", "@types/react": "19.2.7", "@types/react-dom": "19.2.3", "@vitest/browser": "^4.0.13", react: "^19.2.0", tsup: "^8.5.1", typescript: "^5.9.3", vitest: "^4.0.13" }, peerDependencies: { next: "^12.0.0 || ^13.0.0 || ^14.0.0 || ^15.0.0 || ^16.0.0", react: "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" }, publishConfig: { access: "public" }, dependencies: { "@safaricom-mxl/browser": "workspace:*", "server-only": "^0.0.1" }, peerDependenciesMeta: { next: { optional: true }, react: { optional: true } } }; } }); // src/index.tsx import { getInitSnippet } from "@safaricom-mxl/browser"; import Script from "next/script.js"; import React from "react"; // src/constants.ts var CDN_URL = "https://mxl-scripts.apps.ocpthikadev01.safaricom.net/v1/mxl.js"; // src/index.tsx export * from "@safaricom-mxl/browser"; var packageJson = require_package(); var stringify = (obj) => { if (typeof obj === "object" && obj !== null && obj !== void 0) { const entries = Object.entries(obj).map(([key, value]) => { if (key === "filter") { return `"${key}":${value}`; } return `"${key}":${JSON.stringify(value)}`; }); return `{${entries.join(",")}}`; } return JSON.stringify(obj); }; function MXLAnalytics({ profileId, cdnUrl, globalProperties, ...options }) { const methods = [ { name: "init", value: { ...options, sdk: "nextjs", sdkVersion: packageJson.version } } ]; if (profileId) { methods.push({ name: "identify", value: { profileId } }); } if (globalProperties) { methods.push({ name: "setGlobalProperties", value: globalProperties }); } const appendVersion = (url) => { if (url.endsWith(".js")) { return `${url}?v=${process.env.NEXTJS_VERSION}`; } return url; }; return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(Script, { src: appendVersion(cdnUrl || CDN_URL), async: true, defer: true }), /* @__PURE__ */ React.createElement( Script, { strategy: "beforeInteractive", dangerouslySetInnerHTML: { __html: `${getInitSnippet()} ${methods.map((method) => { return `window.mxl('${method.name}', ${stringify(method.value)});`; }).join("\n")}` } } )); } function IdentifyComponent(props) { return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement( Script, { dangerouslySetInnerHTML: { __html: `window.mxl('identify', ${JSON.stringify(props)});` } } )); } function SetGlobalPropertiesComponent(props) { return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement( Script, { dangerouslySetInnerHTML: { __html: `window.mxl('setGlobalProperties', ${JSON.stringify(props)});` } } )); } function useMxlAnalytics() { return { track, screenView, identify, increment, decrement, clear, setGlobalProperties, fetchDeviceId }; } function setGlobalProperties(properties) { window.mxl?.("setGlobalProperties", properties); } function track(name, properties) { window.mxl?.("track", name, properties); } function screenView(pathOrProperties, propertiesOrUndefined) { window.mxl?.("screenView", pathOrProperties, propertiesOrUndefined); } function identify(payload) { window.mxl?.("identify", payload); } function increment(payload) { window.mxl?.("increment", payload); } function decrement(payload) { window.mxl?.("decrement", payload); } function clear() { window.mxl?.("clear"); } function fetchDeviceId() { return window.mxl.fetchDeviceId(); } export { IdentifyComponent, MXLAnalytics, SetGlobalPropertiesComponent, useMxlAnalytics };