@funnelenvy-npm/fe-dev-utils
Version:
Helper function to build client side A/B tests
39 lines (38 loc) • 1.42 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const on_error_1 = __importDefault(require("../on-error"));
const observeDom = ({ selector, callback, config, activity = null, errorHandler = null, }) => {
const defaultConfig = {
childList: true,
subtree: true,
attributes: true,
};
const mergedConfig = { ...defaultConfig, ...config };
try {
const target = document.querySelector(selector);
if (!target) {
throw new Error(`Target element "${selector}" not found.`);
}
const observer = new MutationObserver((mutations) => {
mutations.forEach((mutation) => {
callback(mutation);
});
});
observer.observe(target, mergedConfig);
// Return a function to disconnect the observer
return () => {
observer.disconnect();
};
}
catch (err) {
const handleOnError = errorHandler || on_error_1.default;
// Ensure the error is of type `Error`
const error = err instanceof Error ? err : new Error('An unknown error occurred');
handleOnError({ activity: activity || 'Unknown Activity', error });
return null;
}
};
exports.default = observeDom;